Log4net的preserveLogFileNameExtension无法工作

5

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


它可能与staticLogFileName冲突,在这种情况下我认为你不想要它。 - stuartd
我已经尝试移除 staticLogFileName,但仍然无法正常工作... - user845392
1
你使用的是哪个版本?另外,你可以尝试使用<layout type="log4net.Layout.PatternLayout">吗?除了将其更改以修复log4net异常之外,这在1.2.13版本上对我有效。 - matth
1
你的log4net版本是什么? - Sivakumar
1个回答

3

我的第一个答案(下面)是基于log4net的v1.2.10版本,我被轻轻地推向了包含“preserveLogFileNameExtension”属性的v1.2.13版本。一些测试证实该属性也起作用,并且不依赖于“staticLogFilename”属性。

我认为OP正在使用不包含该属性的log4net的旧版本,因此表现出以下描述的行为(making3和Sivakumar的评论都是正确的,我认为)

再次感谢让我走出1.2.10的泥潭。


最初的答案

首先:在vanilla log4net(我正在查看的版本为1.2.10.0)中,不存在RollingFileAppender(或任何appender)的preserveLogFileNameExtension属性。大多数log4net组件将消耗您发送到其路线的任何属性配置,而不会抱怨,但这并不一定转化为组件的行为


当按大小(或合成)滚动时,发生的情况是将滚动硬编码为使用迭代号对日志文件进行后缀。您总会得到一个与下一个文件编号匹配的“file.log.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。 您甚至可以尝试从香草RollingFileAppender继承并仅覆盖必要的方法。 AdjustFileBeforeAppend是虚拟的,并且是所有翻转需求的起点; 您可以尝试例如反转对RollOverDateRollOverSize的调用以使用复合模式...


你可能对1.2.10版本是正确的,但对于当前版本(1.2.13)来说并不适用:http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.PreserveLogFileNameExtension.html 强烈建议更新,因为在1.2.10和1.2.11之间修复了一些滚动文件的恶性错误。 - Jeroen Mostert
@JeroenMostert 感谢您的提醒。我没有想到在这些小版本中会有一些更改。 - samy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接