Log4Net上的滚动

时间:2014-06-25 08:07:43

标签: c# log4net

我读了一篇文章说:

  

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

它说:

  

staticLogFileName指示是否需要始终将(log)写入同一文件。当使用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设为Date,将datePattern设为.yyyy-MM-dd HH:mm, 将maxSizeRollbackups设置为3,然后将staticLogFileName设置为False,因此它应该每分钟在单独的文件上记录三个日志,但它不会!有什么问题?

注意:这是文章的Link

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

enter image description here

2 个答案:

答案 0 :(得分:4)

问题是你在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> 

结果如下:

enter image description here

答案 1 :(得分:0)

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

我建议使用Composite滚动并调整大小,这样每分钟就有3个日志文件。

否则你可以尝试创建自己的appender,看起来像下面的东西。

    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();
            }
        }
    }

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