2

当旧的日志文件超过 MaxFileSize 并且也停止将日志信息写入已经超过的文件时,我的 log4net 不会以某种方式滚动到新文件。但是当我重新启动服务器时,它确实将旧的重命名为 ServerLog.txt.1 并创建了一个新文件 ServerLog.txt 并写入该文件。

这是我的 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>

有人可以帮帮我吗?谢谢。

4

4 回答 4

2

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

您需要使用附加程序设置锁定模型,以防止应用程序域在访问文件时发生冲突。

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

<?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>
于 2010-12-16T20:29:58.400 回答
1

尝试将 appendToFile 值设置为 false。请参阅http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.RollingStyle.html

于 2010-12-16T22:17:26.210 回答
1

在 Config 中将“rollingStyle”更改为“Composite”对我有用。

<log4net debug="true">
  ....  
  <rollingStyle value="Composite"/>
  ....
</log4net>
于 2019-02-22T13:05:07.740 回答
0

我会尝试删除“staticLogFileName”。我们使用与您几乎相同的配置设置;但我们没有指定 staticLogFileName 属性。(这是在黑暗中拍摄;因为应该可以将 staticLogFileName 设置为 true)

于 2010-12-16T22:31:32.453 回答