Подтвердить что ты не робот

Log4net один файл за один проход

Мне нужно мое приложение для создания файла журнала каждый раз, когда он запускается.

Мой предпочтительный формат будет App.log.yyyy-MM-dd_HH-mm-ss. Если это невозможно, я бы согласился на App.log.yyyy-MM-dd.counter

Это моя текущая конфигурация appender:

<appender name="File" type="log4net.Appender.RollingFileAppender">
  <file value="App.log"/>
  <rollingStyle value="Date"/>
  <datePattern value=".yyyy-MM-dd_HH-mm-ss"/>
  <staticLogFileName value="false"/>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>

Но он создает случайное количество файлов на основе даты и времени.

4b9b3361

Ответ 1

Я предполагаю, что приложение должно создавать только один файл журнала каждый раз, когда он запускается, поэтому вам не требуется скопированный файл-приложение (хотя мое решение будет применяться и для скопированных файловых приложений):

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="c:\temp\App-%date{yyyy-MM-dd_HH-mm-ss}.log" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%2thread] %-5level - %message%newline" />
    </layout>
</appender>

(Очевидно, вы можете использовать другой собственный макет и другие настройки для файлового приложения.)

Ответ 2

Также обратите внимание, что вы можете установить стиль катания как

rollingstyle="Once"

и он будет создавать новый файл каждый раз при его запуске. Если для параметра staticLogFileName установлено значение true (например, logname.log), предыдущие журналы будут установлены на logname.log.1, logname.log.2 и т.д.

Количество файлов, хранящихся до перезаписывания самого старого (скажем, 10), можно контролировать, установив

maxSizeRollBackups="10"

Edit: Моя конфигурация, которая создает datestamped журнал на выполнение (если он не существует, и в этом случае он следует правилу .1, выглядит так:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Logs\MyLog-%date{dd-MM-yyyy}.log" />
    <appendToFile value="false" />    
    <maxSizeRollBackups value="-1" /> <!--infinite-->
    <staticLogFileName value="true" />
    <rollingStyle value="Once" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%thread] %c{1} - %m%n" />
    </layout>
</appender>

Не уверен, что 100%, если мне нужно appendToFile="false" как docs сказать, что это делается автоматически, когда вы используете rollingstyle="Once", но это делает это яснее в любом случае.

Ответ 3

Он документально подтвержден из apache в документах log4net по адресу:

https://logging.apache.org/log4net/release/config-examples.html

ctrl + f для "для выполнения программы"

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="logfile.txt" />
    <appendToFile value="false" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="50GB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>