2010-06-15 7 views
34

J'ai besoin de mon application pour créer un fichier journal chaque fois qu'il s'exécute.log4net un fichier par exécution

Mon format préféré serait App.log.yyyy-MM-dd_HH-mm-ss. Si ce n'est pas possible, je me contenterais de App.log.yyyy-MM-dd.counter

Voici ma configuration actuelle 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> 

Mais il crée un nombre aléatoire de fichiers basés sur sur la date et l'heure.

Répondre

51

Je suppose que l'application doit créer un seul fichier journal à chaque fois qu'il fonctionne, de sorte que vous n'avez pas besoin d'un appender fichier de roulement (bien que ma solution s'appliquerait pour rouler appenders fichier ainsi):

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

(Évidemment, vous pouvez utiliser d'autres votre propre mise en page et d'autres paramètres du fichier appender.)

+2

qui a fait l'affaire. Je ne connaissais pas PatternString. Merci! –

+0

Corrigez-moi si je me trompe, mais cela va créer un nombre illimité de fichiers journaux, où la solution rollingstyle = Once traitera automatiquement la purge des anciens fichiers. Je pense que cette solution est meilleure. – habermanm

+0

Je suppose que vous avez raison. Je ne me souviens pas si "rollingstyle = une fois" était possible quand j'ai donné ma réponse ... –

27

Notez également que vous pouvez définir votre style de roulement comme

rollingstyle="Once"

et il va créer un nouveau fichier chaque fois qu'il est exécuté. Si staticLogFileName est à true (par exemple, logname.log) les journaux précédents seront mis à logname.log.1, logname.log.2, etc.

Le nombre de dossiers conservés avant d'écraser le plus ancien (disons, 10) peut être contrôlée en réglant

maxSizeRollBackups="10"

Edit: Ma config, ce qui crée un journal datestamped par l'exécution (sauf si il existe, auquel cas il suit la règle .1, ressemble à ceci:

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

pas 100% sûr si je dois appendToFile="false" comme the docs dire que cela est fait automatiquement lorsque vous utilisez rollingStyle="Once", mais cela rend plus clair dans tous les cas.

0

Il est documenté de apache dans les docs log4net à:

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

ctrl + f pour "par l'exécution du programme"

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