Щоденне ім'я файлу Log4net з датою у назві файлу


Відповіді:


103

У своєму конфігураційному файлі Log4net використовуйте наступний параметр із RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
Здається, це було перетворено на елемент конфігурації: <datePattern value = "dd.MM.yyyy'.log '" /> Ура!
longda

3
@mstaessen <preserveLogFileNameExtension value="true" />- правильний синтаксис, і це чудова відповідь. Як сталася втрата, можна запитати?
Ларрі Б

1
Якщо я пригадую правильно, це йшло так. При запуску log4net генерує перше ім'я файлу в послідовності прокатки. Він виявить, що цей файл вже існує, і тоді він вирішить перейти до другого файлу, але коли той також вже є, він не вирішує прокрутити, а натомість очищає його і перезаписує все у цьому другому файлі журналу. Це проходить зовсім непомітно, поки вам не потрібні журнали очищеного
часового

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>

Я думаю, вам слід виділити головний момент того, який параметр вирішити проблему, як це зробив @Mun. Однак я також проголосував за вашу відповідь.
RDeveloper

1
Саме елемент DatePattern спільно з елементом staticLogFileName (і відзначте атрибут значення для елемента файлу) працював для мене
Michhes

Повна відповідь!
Нагеш

32

Для RollingLogFileAppender вам також потрібні такі елементи та значення:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

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
.
.

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 значення набір атрибутів для true.

  • Переконайтеся , що у вас є staticLogFileName значення набір для false.

  • Встановіть значенняrollingStyle атрибута на .Date


Ви також можете встановити rollingStyle на Composite, який згортається як за датою, так і за розміром.
Саймон Тевсі

1
Чудово працює. Я також додам у підсумку: Переконайтесь, що для параметра staticLogFileName встановлено значення false
Randall Flagg

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>

чому існують %date{yyyyMM}і value="ddMMyyyy" ? яка ефективна схема дати?
Аллан Руїн

Я думаю, що датаPattern призначена для імені файлу, але% date {yyyyMM} призначений для батьківського каталогу (я цього хотів)
Fourat

Атрибут datePattern встановлює період прокатки для Date rollingStyle. Див. Logging.apache.org/log4net/release/config-examples.html у розділі RollingFileAppender. "Наприклад, шаблон дати" yyyyMMdd "буде котитися щодня. Див. System.Globalization.DateTimeFormatInfo для переліку доступних шаблонів."
Райан Буддіком

@rbuddicom так, але питання полягає в тому, як зберегти розширення файлу.
Фурат

Я знаю, Аллан сумнівався в цілі 'value = "ddMMyyyy' '. Ваш коментар "Я думаю, що датаPattern призначена для імені файлу" є неправильним у цьому плані.
Райан Буддіком

0

Розширений розділ конфігурації у попередній відповіді з

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

перераховані твори, але мені не довелося користуватися

<staticLogFileName value="false" /> 

. Я думаю, що RollingAppender повинен (логічно) ігнорувати це налаштування, оскільки за визначенням файл переробляється щодня, коли програма перезапускається / повторно використовується. Можливо, це має значення для негайного перекидання кожного разу, коли програма починається.


Для мене це не працюватиме без значення <staticLogFileName = "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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.