2010-06-15 3 views
34

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

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

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

ответ

51

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

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

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

+2

Это сделал трюк. Я не знал о PatternString. Благодаря! –

+0

Исправьте меня, если я ошибаюсь, но это создаст неограниченное количество файлов журнала, где в качестве стиля катания = После того, как решение автоматически обработает очистку старых файлов. Я думаю, что решение лучше. – habermanm

+0

Я думаю, вы правы. Я не могу вспомнить, возможно ли «кастинг» = один раз », когда я дал свой ответ ... –

27

Кроме того, обратите внимание, что вы можете настроить свой стиль качению, как

rollingstyle="Once"

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

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

maxSizeRollBackups="10"

Edit: Мой конфиг, который создает журнал за штамп даты исполнения (если не существует, то в этом случае следует .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", как the docs говорят, что это делается автоматически при использовании rollingStyle="Once", но это делает его более четким, в любом случае.

0

Это документируется апача в 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> 
Смежные вопросы