log4net un fichier par exécution

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

Mon format préféré serait App.journal.AAAA-MM-jj_hh-mm-ss. Si ce n'est pas possible, je me contenterais de l'application .journal.AAAA-MM-JJ.compteur

Ceci est ma configuration actuelle de l'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 en fonction de la date et de l'heure.

42
demandé sur New Alexandria 2010-06-16 00:39:49

3 réponses

Je suppose que l'application ne doit créer qu'un seul fichier journal chaque fois qu'elle s'exécute, donc vous n'avez pas besoin d'un addender de fichier roulant (bien que ma solution s'applique également aux addenders de fichiers roulants):

<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 votre propre mise en page et d'autres paramètres pour l'appender de fichiers.)

54
répondu Stefan Egli 2013-10-01 14:28:39

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 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 le plus ancien (disons, 10) peut être contrôlé en définissant

maxSizeRollBackups="10"

Modifier: Ma configuration, qui crée un journal datestamped par exécution (sauf si un existe, auquel cas il suit le .1 règle, 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" comme les documents disent que c'est fait automatiquement lorsque vous utilisez rollingStyle="Once", mais cela le rend plus clair dans tous les cas.

31
répondu Alex 2016-08-04 14:14:53

Il est documenté à partir d'apache dans les documents log4net à:

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

Ctrl + f Pour "par exécution de 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
répondu Jordan Stefanelli 2017-08-23 12:31:30