滚动日志文件后,log4net会生成错误的日志文件名

时间:2013-12-09 19:14:13

标签: c#-4.0 log4net log4net-configuration log4net-appender

基本上我有log4net的配置:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="RollingFileAppenderWithDeletion" />
  </root>
  <appender name="RollingFileAppenderWithDeletion" type="Namespace.RollingFileAppenderWithDeletion">
    <file type="log4net.Util.PatternString" value="Logs/%property{LogName}/log.%property{ServiceName}-PID-%processid_%date{yyyyMMdd}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="50MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd MMM yyyy HH:mm:ss,ffff} [%thread] %exception - %message%newline"/>
    </layout>
  </appender>
</log4net>

现在我遇到了问题。每次log4net滚动日志文件时,它都不会更改日志文件的日期部分。例如,如果今天的日志文件是 - log.MyServiceName-PID-1234_20131208.log ,明天滚动文件后,文件名将不会改变,所以我最终会有一个回滚日志像这样的文件和活动日志文件

  1. log.QA3NewMarkingToolAdminService-PID-17584_20131208.log
  2. log.QA3NewMarkingToolAdminService-PID-17584_20131208.log2013Dec08
  3. 我想拥有的是

    1. log.QA3NewMarkingToolAdminService-PID-17584_20131209.log - 活动日志文件
    2. log.QA3NewMarkingToolAdminService-PID-17584_20131208.log2013Dec08 - 已回滚
    3. 现在我遇到this post,但它对我没有帮助。特别是,如果我从文件中删除日期模式,并将 preserveLogFileNameExtension 设置为 true ,我将无法在活动日志文件中看到日期部分。如果我进一步将 staticLogFileName 设置为 false ,我将不再拥有活动日志文件,而是活动日志文件具有回滚日志文件名模式。

      我在这里缺少什么?如何在回滚后生成正确的日志文件名。

      我正在使用log4net 1.2.10.0版。不幸的是我无法将其升级到更新的版本。

      更新 这是RollingFileAppenderWithDeletion的自定义实现。它只是在日志文件滚动发生后清理旧的回滚文件。

      public class RollingFileAppenderWithDeletion :RollingFileAppender
          {
              private IFileBurner m_fileBurner;
              private const int checkMinutes = 1664;
              public RollingFileAppenderWithDeletion()
              {
                  m_fileBurner = FileBurner.Instance;
      
              }
      
              protected override void AdjustFileBeforeAppend()
              {
                  base.AdjustFileBeforeAppend();
      
                  string path = base.File;
                  string directoryPath = Path.GetDirectoryName(path);
      
                  IDeletionRequirements requirements = new DeletionRequirements();
                  requirements.CheckEveryMinutes = checkMinutes;
                  requirements.DayLimit = MaxSizeRollBackups;
                  requirements.Directories = new List<string> { directoryPath };
      
                  m_fileBurner.ClearLogFiles(requirements);
      
              }
          }
      

1 个答案:

答案 0 :(得分:0)

您使用的是Namespace.RollingAppenderWithDeletion类型,它绝对不是标准的appender。尝试使用log4net.Appender.RollingFileAppender类型,看看是否有效。当您使用自定义appender时,您需要发布一些代码,或者找到未调用文件名代码的原因。