C# - 日期,大小和应用程序重新启动时的log4net翻转

时间:2017-07-07 22:09:33

标签: log4net log4net-configuration log4net-appender

我正在使用使用log4net的wpf应用程序。它当前记录到单个文件,只有在它变得太大时才会翻转。我正在尝试修改它,以便在文件变得太大,日期更改或重新启动应用程序时它会增长。

我试图让输出尽可能接近以下

App_2017-07-06.0.txt    //First launch on 2017-07-06
App_2017-07-06.1.txt    //Rollover due to size limit
App_2017-07-06.2.txt    //Application relaunch
App_2017-07-06.3.txt    //Rollover due to size limit
App_2017-07-07.0.txt    //Rollover due to date change
App_2017-07-07.1.txt    //Rollover due to size limit
App_2017-07-07.2.txt    //Application relaunch - Currently Logging File

根据我从文档中理解的内容,滚动样式可以设置为" compostite"捕获日期和大小,或者可以设置为"一次"捕获应用程序重新启动。它似乎没有办法完成所有3:http://logging.apache.org/log4net/release/sdk/html/T_log4net_Appender_RollingFileAppender_RollingMode.htm

我得到了一切看起来正确并且工作正常但除了应用程序重新启动覆盖预先存在的文件(我想象因为appendToFile属性)。我似乎无法按照我需要的方式工作,我无法在文档中找到任何答案。

这个问题似乎是试图达到类似的目标,但没有解决我的问题: How do I force a rollover at application startup with Log4net RolloverFileAppender?

我错过了什么吗?是不是可以用log4net做到这一点?

我当前的配置

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Log\App.txt" />
      <appendToFile value="false" />
      <rollingStyle value="Composite" />
      <maximumFileSize value="10KB" />
      <maxSizeRollBackups value="-1" />
      <staticLogFileName value="false" />
      <preserveLogFileNameExtension value="true" />
      <countDirection value="1" />
      <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %level User = %username  Class = %property{ClassName}  Method = %property{MethodName}%newlineMessage - %message%newline%exception%newline***************************************" />
      </layout>
    </appender>

我当前的输出

App_2017-07-06.0.txt    //First launch on 2017-07-06
App_2017-07-06.1.txt    //Rollover due to size limit
App_2017-07-06.1.txt    //Application relaunch - overwrites pre-existing file
App_2017-07-06.2.txt    //Rollover due to size limit
App_2017-07-07.0.txt    //Rollover due to date change
App_2017-07-07.1.txt    //Rollover due to size limit
App_2017-07-07.1.txt    //Application relaunch - overwrites pre-existing file - Currently logging file

1 个答案:

答案 0 :(得分:0)

据我所知,log4net将日志文件复制到xxxx。{number} .txt,当它转到下一个文件时。因此,您的第一个App_2017-07-06.1.txt从未创建,并且在应用程序重新启动时仍称为App_2017-07-06.txt。您已配置,因此将覆盖App_2017-07-06.txt,并且永远不会创建您的第一个App_2017-07-06.1.txt。

您可以将<appendToFile value="true" />配置为不覆盖现有文件。