2014-07-02 4 views
0

Je développe une application qui fait quelque chose à chaque fois en plusieurs passages.force log4net pour écraser le fichier

J'ai beaucoup d'informations de journalisation dans chaque exécution. Donc, quand une exécution a été réussie (aucune exception n'est levée), et que les utilisateurs commencent une nouvelle exécution, je veux écraser le fichier journal au démarrage de la nouvelle exécution.

Comment puis-je y parvenir?

En outre: Comment obtenir le nom du fichier journal à partir de l'interface de l'enregistreur? Je ne veux pas analyser le App.xaml.cs

Répondre

0

La solution est:

public static void StartNewLogFile() 
{ 
    Hierarchy hierachy = (Hierarchy)log4net.LogManager.GetRepository(); 
    Logger logger = hierachy.Root; 

    var rootAppender = logger.Appenders.OfType<FileAppender>().FirstOrDefault(); 
    string filename = rootAppender != null ? rootAppender.File : string.Empty; 

    while (logger != null) 
    { 
     foreach (IAppender appender in logger.Appenders) 
     { 
      FileAppender fileAppender = appender as FileAppender; 
      if (fileAppender != null) 
      { 
       fileAppender.File = filename + "a"; 
       fileAppender.File = filename; 
       fileAppender.ActivateOptions(); 
      } 
     } 
     logger = logger.Parent; 
    } 

    File.Delete(filename + "a"); 
} 

Avec une grande aide de: Programatically force a new log file with Log4Net

2

Pour écraser le fichier journal, utilisez un FileAppender et mis appendToFile-false:

appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file value="log.txt" /> 
    <appendToFile value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] .. etc .. /> 
    </layout> 
</appender> 

Toutefois, ce ne sera pas en mesure de savoir si votre course a été un succès, et écrase le fichier chaque fois que l'application est exécutée.

+0

J'ai déjà cette configuration. La question était, comment puis-je forcer log4net à remplacer ce fichier lors de l'exécution. Non seulement lorsque l'application démarre. –