web-dev-qa-db-fra.com

log4net un fichier par exécution

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

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

Voici ma configuration actuelle d'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 cela crée un nombre aléatoire de fichiers en fonction de la date et de l'heure.

42
Diego Mijelshon

Je suppose que l'application ne doit créer qu'un seul fichier journal chaque fois qu'elle s'exécute, de sorte que vous n'avez pas besoin d'appender de fichier en défilement (bien que ma solution s'applique également aux appenders de fichier en défilement):

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

(Vous pouvez évidemment utiliser votre propre mise en page et d'autres paramètres pour l'appender de fichier.)

55
Stefan Egli

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

rollingstyle="Once"

et il créera un nouveau fichier à chaque exécution. Si staticLogFileName est défini sur true (par exemple, logname.log), les journaux précédents seront définis sur logname.log.1, logname.log.2, etc. 

Le nombre de fichiers conservés avant d’écraser les plus anciens (10, par exemple) peut être contrôlé en définissant

maxSizeRollBackups="10"

Edit: Ma configuration, qui crée un journal horodaté par exécution (sauf s’il en existe un, suivi de 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 sûr à 100% si j'ai besoin de appendToFile="false" en tant que la documentation dis que c'est fait automatiquement lorsque vous utilisez rollingStyle="Once", mais cela le rend plus clair dans tous les cas.

32
Alex

Il est documenté à partir d'Apache dans les documents log4net à l'adresse:

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

ctrl + f pour "exécution par 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>
0
Jordan Stefanelli