2014-07-02 128 views
0

我開發了一個應用程序,每次都在幾次運行中執行某些操作。強制log4net覆蓋文件

我在每次運行中獲得了大量的日誌信息。因此,當運行成功(沒有拋出異常),並且用戶啓動新的運行時,我想在開始新運行時覆蓋日誌文件。

我該如何做到這一點?

此外:如何從Logger界面獲取日誌文件名稱?我不想解析App.xaml.cs

回答

0

解決的辦法是:

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"); 
} 

從一個很大的幫助:Programatically force a new log file with Log4Net

2

要覆蓋日誌文件,請使用FileAppender並設置appendToFilefalse

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> 

然而,這將不能夠知道,如果你運行非常成功,每次運行應用程序時都會覆蓋該文件。

+0

我已經有此配置。問題是,如何強制log4net在運行時覆蓋此文件。不僅在應用程序啓動時。 –