Log4net прокручивает ежедневное имя файла с датой в имени файла

Ответы:

103

В файле конфигурации Log4net используйте следующий параметр с RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />
Mun
источник
28
Похоже, это было повышено до элемента конфигурации: <datePattern value = "dd.MM.yyyy'.log '" /> Ура!
longda
3
@mstaessen <preserveLogFileNameExtension value="true" />- правильный синтаксис, и это отличный ответ. Могу я спросить, как произошла потеря?
Ларри Би,
1
Если я правильно помню, это было так. При запуске log4net сгенерирует первое имя файла в повторяющейся последовательности. Он обнаружит, что этот файл уже существует, и затем решит выполнить откат ко второму файлу, но, когда он уже существует, он не решает выполнить откат, а вместо этого очищает его и перезаписывает все во втором файле журнала. Это проходит незаметно до тех пор, пока вам не понадобятся журналы очищенного периода ...
mstaessen
207
<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>
Nonkichi
источник
1
Я думаю, вам следует выделить основной момент, какой параметр решить проблему, как это сделал @Mun. Однако я тоже проголосовал за ваш ответ.
RDeveloper
1
Это был элемент datePattern в сочетании с элементом staticLogFileName (и обратите внимание на атрибут value для элемента file), который сработал для меня
Michhes
Полный ответ!
Нагеш
32

Для RollingLogFileAppender вам также потребуются эти элементы и значения:

<rollingStyle value="Date" />
<staticLogFileName value="false" />
BobD
источник
3
Это работает, но добавляет дату после расширения файла. Например, я получаю файлы журнала, такие как Error.log20111104 - Кто-нибудь знает, как немного лучше отформатировать имя файла?
LostNomad311
Вот как лучше отформатировать имя файла: stackoverflow.com/questions/615092/…
LostNomad311
для чего используется staticLogFileName? Я только хочу, чтобы файл журнала был преобразован в новое имя после окончания дня. Я хочу использовать монитор журнала, который каждый раз смотрит на определенное.
Вс,
22

Используя 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" />
Джек Торли
источник
18

В итоге я использовал (обратите внимание на имя файла '.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
.
.
Njal
источник
preserveLogFileNameExtensionне работает с более ранними версиями log4net (например, v1.2.10), как описано здесь
Дмитрий Карпенко
13

Я перепробовал все ответы, но всегда чего-то не хватало и не работало так, как ожидалось для меня.

Затем я немного поэкспериментировал с подсказками, приведенными в каждом ответе, и добился успеха со следующей настройкой:

<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

Matt
источник
Вы также можете установить RollingStyle на Composite, который зависит как от даты, так и от размера.
Саймон Тевси
1
Прекрасно работает. Я бы также добавил в резюме: Убедитесь, что для параметра staticLogFileName установлено значение false
Рэндалл Флэгг
5

Чтобы сохранить расширение файла:

<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>
Fourat
источник
почему есть %date{yyyyMM}и value="ddMMyyyy" ? какой шаблон даты вступления в силу?
Allan Ruin
Я думаю, что datePattern используется для имени файла, но% date {yyyyMM} - для родительского каталога (я так и хотел)
Fourat
Атрибут datePattern устанавливает скользящий период для Date RollingStyle. См. Logging.apache.org/log4net/release/config-examples.html в разделе RollingFileAppender. «Например, шаблон даты« yyyyMMdd »будет катиться каждый день. См. Список доступных шаблонов в System.Globalization.DateTimeFormatInfo».
Райан Баддиком
@rbuddicom да, но вопрос в том, как сохранить расширение файла.
Fourat
Я знаю, Аллан поставил под сомнение цель 'value = "ddMMyyyy". Ваш комментарий «Я думаю, что datePattern для имени файла» неверен в этом отношении.
Райан Буддом
0

Расширенный раздел конфигурации в предыдущем ответе с

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

перечисленные работы, но мне не пришлось использовать

<staticLogFileName value="false" /> 

, Я думаю, что RollingAppender должен (логически) игнорировать этот параметр, поскольку по определению файл перестраивается каждый день при перезапуске / повторном использовании приложения. Возможно, это имеет значение для немедленного опрокидывания КАЖДОГО при запуске приложения.

AllenM
источник
Для меня это не сработало бы без <staticLogFileName value = "false" />
nurettin
мне тоже пришлось установить staticLogFileName в false, иначе он не регистрировался
oonyalo
0

Я переместил конфигурацию в код, чтобы облегчить модификацию из 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);
Параг Бангад
источник