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>
Но он создает случайное количество файлов на основе даты и времени.
Ответы
Ответ 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>