Log4net preserveLogFileNameExtension不起作用

时间:2014-12-03 16:21:12

标签: log4net log4net-configuration log4net-appender

这是我的log4net配置,翻转日志文件创建错误的扩展名。使用log_debug.txt创建的第一个文件和使用log_debug.txt.1创建的翻转文件。但理想情况下应该是log_debug.1.txt。

我使用preserveLogFileNameExtension值为true,但似乎无效。你能检查一下,如果有什么不对的地方让我知道吗?



<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
    <file value=".\logs\log_debug.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="20" />
    <maximumFileSize value="2MB" />
    <preserveLogFileNameExtension value="true" />
    <staticLogFileName value="true" />
    <layout type="propertyPatternLayout">
      <conversionPattern value="%date || Thread=%thread" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  </appender>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

我的第一个答案(下面)基于log4net的v1.2.10,我被轻轻地推向了v1.2.13版本,其中 包含preserveLogFileNameExtension。某些测试确认该属性也按预期工作,并且不依赖于staticLogFilename属性。

我认为OP使用的是以前版本的log4net,它不包含该属性,因此展示了下面描述的行为(make3和Sivakumar评论是现场IMO)

再次感谢我将我从1.2.10的沟槽中唤醒。


初步答案

首先要做的是:vanilla log4net中的preserveLogFileNameExtension(或任何appender)没有RollingFileAppender属性(我正在查看版本1.2.10.0)。大多数log4net组件将使用您发送的任何属性配置而不会抱怨,但它不一定转换为组件中的行为


当滚动大小(或复合)时,会发生的事情是翻转是硬编码的,以使用迭代编号对日志文件进行后缀。您将始终获得一个“file.log.n”,其中n与下一个文件编号匹配(这取决于您的maxSizeRollBackupscountDirection值)。使用当前RollingFileAppender无法避免这种情况(请查看RollingFileAppender.RollOverRenameFiles方法)

怎么办?您可以决定按日期滚动。在这种情况下,可以使用datePattern属性。滚动时datePattern会附加到文件名,因此您可以使用

之类的内容
<file value="file.log" />
<datePattern value=".yyyy-MM-dd-hh-mm-ss'.log'" />

将保留扩展并创建类似file.log.2014-12-11-11-47-54.log的文件(请参阅文件名中的原始.log扩展名)。但是你正在失去尺寸限制方面。如果你去复合材料,你会遇到同样的问题;由于RollOverSize始终在RollOverDate之后出现,因此会出现数字前缀。

您还可以决定使用您想要/需要的命名约定推出自己的appender(啊啊)。您甚至可以尝试从vanilla RollingFileAppender继承并仅覆盖必要的方法。 AdjustFileBeforeAppend是虚拟的,是所有翻转需求的起点;您可以尝试例如撤消对RollOverDateRollOverSize的调用以使用复合模式...