Ответы:
В файле конфигурации Log4net используйте следующий параметр с RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
- правильный синтаксис, и это отличный ответ. Могу я спросить, как произошла потеря?
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Для RollingLogFileAppender вам также потребуются эти элементы и значения:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Используя Log4Net 1.2.13, мы используем следующие параметры конфигурации, чтобы указать дату и время в имени файла.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Что предоставит файлы в следующем соглашении: logname-2015-04-17.txt
При этом, как правило, лучше иметь следующее, чтобы гарантировать, что вы ведете 1 журнал в день.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Если размер файла вызывает беспокойство, следующее разрешает 500 файлов размером 5 МБ до появления нового дня. CountDirection позволяет нумерацию устаревших файлов по возрастанию или убыванию.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
В итоге я использовал (обратите внимание на имя файла '.log' и одинарные кавычки вокруг 'myfilename_'):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
Это дает мне:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
не работает с более ранними версиями log4net (например, v1.2.10), как описано здесь
Я перепробовал все ответы, но всегда чего-то не хватало и не работало так, как ожидалось для меня.
Затем я немного поэкспериментировал с подсказками, приведенными в каждом ответе, и добился успеха со следующей настройкой:
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="-yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
Проблема с другими комбинациями параметров заключалась в том, что в последнем файле не было шаблона времени, или добавлялся шаблон времени, .log20171215
который создавал новое время файла (и новый тип файла! ) Каждый день - или возникали обе проблемы.
Теперь с этой настройкой вы получаете такие файлы:
LOG4NET_Sample_Activity-20171215.log
чего я и хотел.
Подвести итоги:
Не указывайте шаблон даты в <file value=...
атрибуте, просто определите его в datePattern
.
Убедитесь, что для атрибута preserveLogFileNameExtension
value установлено значение true
.
Убедитесь , что у вас есть staticLogFileName
значение набор для false
.
Установите значениеrollingStyle
атрибута на .Date
Чтобы сохранить расширение файла:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="30MB" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true"/>
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
%date{yyyyMM}
и value="ddMMyyyy"
? какой шаблон даты вступления в силу?
Расширенный раздел конфигурации в предыдущем ответе с
...
...
<rollingStyle value="Composite" />
...
...
перечисленные работы, но мне не пришлось использовать
<staticLogFileName value="false" />
, Я думаю, что RollingAppender должен (логически) игнорировать этот параметр, поскольку по определению файл перестраивается каждый день при перезапуске / повторном использовании приложения. Возможно, это имеет значение для немедленного опрокидывания КАЖДОГО при запуске приложения.
Я переместил конфигурацию в код, чтобы облегчить модификацию из CI с использованием системной переменной. Я использовал этот код для имени файла, и результат был 'Log_03-23-2020.log'
log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
Hierarchy hierarchy = (Hierarchy)repository;
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = "Log_";
roller.DatePattern = "MM-dd-yyyy'.log'";
roller.Layout = patternLayout;
roller.MaxFileSize = 1024*1024*10;
roller.MaxSizeRollBackups = 10;
roller.StaticLogFileName = false;
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);