我开发了一个应用程序,它可以在多次运行中执行某些操作。
每次运行都记录了很多日志信息。因此,当运行成功(没有抛出异常),并且用户开始新的运行时,我想在开始新运行时覆盖日志文件。
我怎样才能做到这一点?
此外:如何从Logger界面获取日志文件名?我不想解析App.xaml.cs
答案 0 :(得分:2)
要覆盖日志文件,请使用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>
然而,这将无法知道您的运行是否成功,并且每次运行应用程序时都会覆盖该文件。
答案 1 :(得分: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");
}
的大力帮助下