2010-06-15 14 views
34

Her çalıştığımda bir günlük dosyası oluşturmak için uygulamanıza ihtiyacım var.log4net Çalıştırılan dosya başına bir dosya

Tercih ettiğim biçim App.log.yyyy-MM-dd_HH-mm-ss olacaktır. Bu mümkün değilse, ben App.log.yyyy-AA-dd.counter

Bu benim şimdiki appender yapılandırma razıyım:

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

Ama tabanlı dosyaların rastgele bir sayı oluşturur tarih ve saatte.

cevap

51

Başvuru tek günlük dosyası o çalışan her zaman yaratmak gerektiğini kabul eder, böylece (benim çözüm de dosya appenders haddeleme için de geçerli olacak olsa da) bir haddeleme dosya appender gerekmez:

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

(Açıkçası dosya appender için kendi düzeni ve diğer ayarlar diğer kullanabilirsiniz.)

+2

için

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

ctrl + f. PatternString'i bilmiyordum. Teşekkürler! –

+0

Yanılıyorsam düzeltin, ancak bu, günlük dosyalarının sınırsız sayıda oluşturulmasına neden olur. Bir kez çözüm, eski dosyaların otomatik olarak temizlenmesini sağlar. Bence bu çözüm daha iyi. – habermanm

+0

Sanırım haklısın. Cevabımı verdiğimde "rollingstyle = bir kez" nin mümkün olup olmadığını hatırlayamıyorum ... –

27

Ayrıca

rollingstyle="Once"

olarak haddeleme stilini ayarlayabilirsiniz unutmayın

ve her çalıştırıldığında yeni bir dosya oluşturur. staticLogFileName true olarak ayarlanırsa (örneğin logname.log) Önceki günlükleri

dosya sayısı

ayarlayarak kontrol edilebilir (diyelim ki 10) en eski verilerin üzerine önce tutulan vb logname.log.1, logname.log.2 olarak ayarlanır

maxSizeRollBackups="10"

Düzenleme:

0123: biri olmadıkça, bu durumda o, .1 kuralı izler (yürütme başına datestamped günlüğü oluşturur Benim yapılandırma, şöyle Ben appendToFile="false" the docs olarak gerekirse Değil% 100 emin
<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> 

Eğer rollingStyle="Once" kullandığınızda otomatik olarak yapıldığını söylemek, ancak bu her durumda onu anlaşılır hale getirmektedir.

Bu günün log4net dokümanlarında apache dan belgelenir
0

: "programı başına yürütme" hile yaptı

<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> 
İlgili konular