log4net генерирует неправильное имя файла журнала после прокручивания файлов журнала

В основном у меня есть этот конфиг для 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

То, что я хотел бы иметь

  1. log.QA3NewMarkingToolAdminService-PID-17584_20131209.log - активный файл журнала
  2. log.QA3NewMarkingToolAdminService-PID-17584_20131208.log2013Dec08 - откат

Теперь я наткнулся на этот пост, но он мне не помог. В частности, если я удаляю шаблон даты из файла и устанавливаю для 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 ответ

Вы используете тип Namespace.RollingAppenderWithDeletion, который определенно не является стандартным приложением. Попробуйте использовать тип log4net.Appender.RollingFileAppender и посмотрите, работает ли это. Когда вы используете свой собственный appender, вам нужно опубликовать некоторый код или выяснить, почему код имени файла не вызывается.

Другие вопросы по тегам