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>

4

1 回答 1

3

我的第一个答案(如下)基于 log4net 的 v1.2.10,我被轻轻地推包含preserveLogFileNameExtension. 一些测试证实该属性也可以按预期工作,并且不依赖于该staticLogFilename属性。

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

再次感谢你把我从 1.2.10 的状态中唤醒。


初步答案

首先要做的事情是:vanilla log4net(我正在查看版本 1.2.10.0)中没有preserveLogFileNameExtension属性(或任何附加程序)。RollingFileAppender大多数 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 扩展名)。但是您正在失去尺寸限制方面。如果你选择 Composite,你会遇到同样的问题;因为RollOverSize总是出现在RollOverDate数字前缀出现之后。

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

于 2014-12-11T10:54:29.490 回答