【问题标题】:Rollover on Log4NetLog4Net 上的翻转
【发布时间】:2014-06-25 08:07:43
【问题描述】:

我读过一篇文章说:

rollingStyle 可以是 Date、Size 或 Composite。默认设置 Composite,使用 Size 和 Date 设置的组合。因此,如果您将 datePattern 设置为“.yyyy-MM-dd”并将 maxSizeRollBackups 设置为 10,那么它将每天维护 10 个日志备份。 如果您将 DatePattern 设置为“.yyyy-MM-dd HH:mm”并且 maxSizeRollbackups = 10,那么它将保持每分钟 10 个日志文件备份

它说:

staticLogFileName 表示是否需要一直写入(日志)到同一个文件。当使用 Date 作为滚动样式并且有大量备份时,您需要将其设置为 false。

所以我在我的App.config 中这样做:

<appender name="FileAppender" type="log4net.Appender.FileAppender">

  <file value="E:\operativity.log" />
  <staticLogFileName value="False" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value=".yyyy-MM-dd HH:mm" />
  <maxSizeRollBackups value="3" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date{dd/MM/yyyy HH:mm:ss.fff} - %level - %message%newline" />
  </layout>
</appender>

如您所见,我将 rollingStyle 设置为 DatedatePattern 设置为 .yyyy-MM-dd HH:mm 和 将maxSizeRollbackups 设置为3,我将staticLogFileName 设置为False,因此在单独的文件上每分钟应该需要三个日志,但它不会!有什么问题?

注意:这是文章的Link

编辑:我在windowsservice 中使用它,它只给了我一个日志文件!

【问题讨论】:

  • 它的作用是什么?
  • 它只给了我一个日志文件!!
  • 你的一个日志文件叫什么名字?
  • operativity.log,但您有以下解决方案。
  • @Dan Puzey,它的名字是operability.log

标签: c# log4net


【解决方案1】:

问题是您在 datePattern 中有一个 :(冒号),它是文件名的无效字符。

您还必须使用 RollingFileAppender 而不是 FileAppender。

改变

<datePattern value=".yyyy-MM-dd HH:mm" />

<datePattern value=".yyyy-MM-dd-HHmm" />

您将获得一个文件,因为第一个文件不包含日期时间。并且它将无法创建其他文件,因为它包含:(冒号)

这个已经过测试并且可以工作:

  <log4net>
    <appender name="Debug" type="log4net.Appender.RollingFileAppender">
      <file value="E:\operativity3.log" />
      <appendToFile value="true" />
      <maxSizeRollBackups value="3" />
      <datePattern value=".yyyy-MM-dd-HHmm" />
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="FATAL" />
      </filter>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] [%level] %logger - %message%newline" />
      </layout>      
    </appender>    
    <root>
      <level value="ALL" />
      <appender-ref ref="Debug" />
    </root>
  </log4net> 

结果如下:

【讨论】:

  • 哦,你还得用 RollingFileAppender 而不是 FileAppender
  • 它在哪里创建日志文件?
  • 我将 值更改为“E:\operativity.log”,但它不会创建任何日志!
  • 您是否像我所说的那样将 type="FileAppender" 更改为 type="RollingFileAppender" ?再次更新 XML。
  • 现在我已经测试过了,你应该可以使用我的 XML 并且它应该可以工作了。
【解决方案2】:

也许您没有指定maximumFileSize,它使用的默认值大于您的日志大小。仅在 Date 上滚动时设置 maxSizeRollBackups 没有意义。它不知道如何拆分日志。此外,正如您检查的那样,它不会在几秒钟内滚动。

我建议您使用复合滚动并调整大小,这样您每分钟就有更少的 3 个日志文件。

否则,您可以尝试创建自己的附加程序,如下所示。

    public class MyRollingFileAppender : log4net.Appender.RollingFileAppender
    {
        override protected void AdjustFileBeforeAppend()
        {
            if (RollingStyle == RollingMode.Date)
            {
                // decide if should roll
                if (shouldRoll)
                {  
                    RollOverTime(true);
                }
            }
            else
            {
                base.AdjustFileBeforeAppend();
            }
        }
    }

log4net.Appender.RollingFileAppender 的源代码可以从here 下载。

【讨论】:

  • 我将 rollingStyle 设置为 Date 而不是 Composite 或 Size!
  • 你试过 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2013-12-21
  • 1970-01-01
  • 2017-02-16
  • 2021-04-01
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多