我開發了一個應用程序,每次都在幾次運行中執行某些操作。強制log4net覆蓋文件
我在每次運行中獲得了大量的日誌信息。因此,當運行成功(沒有拋出異常),並且用戶啓動新的運行時,我想在開始新運行時覆蓋日誌文件。
我該如何做到這一點?
此外:如何從Logger界面獲取日誌文件名稱?我不想解析App.xaml.cs
我開發了一個應用程序,每次都在幾次運行中執行某些操作。強制log4net覆蓋文件
我在每次運行中獲得了大量的日誌信息。因此,當運行成功(沒有拋出異常),並且用戶啓動新的運行時,我想在開始新運行時覆蓋日誌文件。
我該如何做到這一點?
此外:如何從Logger界面獲取日誌文件名稱?我不想解析App.xaml.cs
解決的辦法是:
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");
}
要覆蓋日誌文件,請使用FileAppender並設置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>
然而,這將不能夠知道,如果你運行非常成功,每次運行應用程序時都會覆蓋該文件。
我已經有此配置。問題是,如何強制log4net在運行時覆蓋此文件。不僅在應用程序啓動時。 –