2010-12-08 69 views
2

不知何故,当旧的日志文件超过MaxFileSize时,我的log4net不会滚动到新文件,也停止将日志信息写入已经超出的日志信息。但是,当我重新启动服务器时,它将旧的名称重命名为ServerLog.txt.1,并创建一个新的文件ServerLog.txt并写入该文件。Log4Net未在MaxFileSize上滚动

这里是我的log4net.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<log4net debug="true"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs\ServerLog.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="5MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 

有人可以帮我吗?谢谢。

+0

log4net可能无法创建/重命名由文件权限问题引起的备份文件吗?日志文件位于何处? – MatthiasG 2010-12-08 11:12:10

回答

2

我怀疑你的问题可能来自使用IIS的日志。由于可能有不同的应用程序域在IIS内访问日志文件,因此应用程序域可能无法滚动文件,因为日志文件也在另一个应用程序域中打开。

您需要使用appender进行锁定模型设置,以防止应用程序域在访问文件时发生碰撞。

你应该能够做这样的事情:

<?xml version="1.0" encoding="utf-8"?> 
<log4net debug="true"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Logs\ServerLog.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="5MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 
    <lockingModel type="log4net.Appender.FileAppender+MutexLock" /> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
</log4net> 
0

我会尝试删除'staticLogFileName'。我们使用与您相同的配置设置;但我们不指定staticLogFileName属性。 (这是一个黑暗的镜头;因为应该可以将staticLogFileName设置为true)