Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制log4net覆盖文件_C#_Logging_Log4net - Fatal编程技术网

C# 强制log4net覆盖文件

C# 强制log4net覆盖文件,c#,logging,log4net,C#,Logging,Log4net,我开发了一个应用程序,它在几次运行中每次都做一些事情 我在每次运行中都获得了很多日志信息。因此,当一次运行成功(没有引发异常)并且用户开始一次新运行时,我希望在开始新运行时覆盖日志文件 我怎样才能做到这一点 此外:如何从记录器接口中获取日志文件名?我不想分析App.xaml.cs要覆盖日志文件,请使用并设置为false: appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value

我开发了一个应用程序,它在几次运行中每次都做一些事情

我在每次运行中都获得了很多日志信息。因此,当一次运行成功(没有引发异常)并且用户开始一次新运行时,我希望在开始新运行时覆盖日志文件

我怎样才能做到这一点


此外:如何从记录器接口中获取日志文件名?我不想分析
App.xaml.cs

要覆盖日志文件,请使用并设置为
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>
appender name=“FileAppender”type=“log4net.appender.FileAppender”>
解决办法是:

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");
}
publicstaticvoidstartnewlogfile()
{
层次结构层次=(层次结构)log4net.LogManager.GetRepository();
Logger=hierachy.Root;
var rootAppender=logger.Appenders.OfType().FirstOrDefault();
string filename=rootAppender!=null?rootAppender.File:string.Empty;
while(记录器!=null)
{
foreach(logger.Appenders中的iaappender appender)
{
FileAppender FileAppender=作为FileAppender的appender;
if(fileAppender!=null)
{
fileAppender.File=filename+“a”;
fileAppender.File=文件名;
fileAppender.ActivateOptions();
}
}
logger=logger.Parent;
}
删除(文件名+“a”);
}

在以下人员的大力帮助下:

我已经有了此配置。问题是,如何在运行时强制log4net覆盖此文件。不仅仅是在应用程序启动时。