В принципе у меня есть этот конфиг для 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, завтра после прокатки файла имя файла не изменится, поэтому в итоге у меня будет откат файла журнала и активного файла журнала как этот
- log.QA3NewMarkingToolAdminService-ПИД-17584_20131208.log
- log.QA3NewMarkingToolAdminService-PID-17584_20131208.log2013Dec08
То, что я хотел бы иметь
- log.QA3NewMarkingToolAdminService-PID-17584_20131209.log - файл активного журнала
- log.QA3NewMarkingToolAdminService-PID-17584_20131208.log2013Dec08 - откат
Теперь я наткнулся this post, но это мне не помогло. В частности, если я удаляю шаблон даты из файла и устанавливаю preserveLogFileNameExtension в true, я больше не могу видеть дату в активном файле журнала. Если я пойду дальше и установил staticLogFileName - false, у меня больше нет активных файлов журналов, вместо этого у активных файлов журнала есть откат назад.
Что мне здесь не хватает? Как я могу получить правильные имена файлов журналов, созданные после откат.
Я использую log4net version 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);
}
}
привет, спасибо за ответ, отредактировал сообщение. Как вы можете видеть, ничего особенного в пользовательской реализации. Все, что он делает, - это очистка старых файлов журналов. –
Попробуйте использовать этот стандарт, чтобы проверить правильность дат. Если это так, вам нужно отладить ваш RollingFileAppenderWithDeletion. Однако, если я посмотрю на ваше расширение RollingFileAppender, я уверен, что добавит нужную вам функцию. Попробуйте подключить отладчик и посмотреть, что произойдет. – Peter
Я изменил конфигурацию на RollingFileAppender, это тоже не сработало. Помогло бы ли это устранить ваши сомнения, если я скажу, что расширение RollingFileAppender добавляет функцию, которую я хочу? –