繁体   English   中英

log4net设置两个文件的日志记录,这些文件的级别与c#代码不同

[英]log4net set logging of two files with a different level logging from c# code

这是我的问题,我想通过c#应用程序和log4net登录2个不同的文件(一个用于错误,一个用于普通信息),我在xml中找到了配置,但是我想从代码中进行配置,这就是源我发现设置一个文件的日志记录:

 public static void Setup()
    {

        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Root.RemoveAllAppenders();

        PatternLayout patternLayout = new PatternLayout();

        patternLayout.ConversionPattern = "%date THREAD [%thread] %logger: %message%newline"; //%-5level
        patternLayout.ActivateOptions();

        RollingFileAppender infoRoller = new RollingFileAppender();

        infoRoller.AppendToFile = true;
        infoRoller.File = @"logs\";
        infoRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
        infoRoller.MaxSizeRollBackups = 3;
        infoRoller.Layout = patternLayout;
        infoRoller.DatePattern = @"IN\FO\_yyyy-MM-dd.\lo\g";
        infoRoller.StaticLogFileName = false;

        infoRoller.ActivateOptions();

        hierarchy.Root.AddAppender(infoRoller);

        MemoryAppender memory = new MemoryAppender();

        memory.ActivateOptions();
        hierarchy.Root.AddAppender(memory);

        hierarchy.Root.Level = Level.Debug;
        hierarchy.Configured = true;
    }

在另一个类中进行日志记录:

private readonly ILog log = LogManager.GetLogger("GENERAL-LOG");

Logger.Setup();
log.Debug("Configurazioni caricate con successo.");

该代码有效。

现在,我做了此更改以获取2日志:

    public static void Setup()
    {

        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Root.RemoveAllAppenders();

        PatternLayout patternLayout = new PatternLayout();

        patternLayout.ConversionPattern = "%date THREAD [%thread] %logger: %message%newline"; //%-5level
        patternLayout.ActivateOptions();

        RollingFileAppender infoRoller = new RollingFileAppender();

        infoRoller.AppendToFile = true;
        infoRoller.File = @"logs\";
        infoRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
        infoRoller.MaxSizeRollBackups = 3;
        infoRoller.Layout = patternLayout;
        infoRoller.DatePattern = @"IN\FO\_yyyy-MM-dd.\lo\g";
        infoRoller.StaticLogFileName = false;

        infoRoller.ActivateOptions();
        hierarchy.Root.AddAppender(infoRoller);

        //ADDED CODE
        RollingFileAppender errorRoller = new RollingFileAppender();

        errorRoller.AppendToFile = true;
        errorRoller.File = @"logs\";
        errorRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
        errorRoller.MaxSizeRollBackups = 3;
        errorRoller.Layout = patternLayout;
        errorRoller.DatePattern = @"ERROR_yyyy-MM-dd.\lo\g";
        errorRoller.StaticLogFileName = false;

        errorRoller.ActivateOptions();
        hierarchy.Root.AddAppender(errorRoller);

        MemoryAppender memory = new MemoryAppender();

        memory.ActivateOptions();
        hierarchy.Root.AddAppender(memory);

        hierarchy.Root.Level = Level.Debug;
        hierarchy.Configured = true;
    }

}

从其他班级:

    private readonly ILog log = LogManager.GetLogger("GENERAL-LOG");
    private readonly ILog elog = LogManager.GetLogger("ERROR-LOG");

    Logger.Setup();
    log.Debug("prova scrittura in file1");
    elog.Error("prova errore scrittura in file2");

结果:两个日志文件都写入了两个消息。

请提出建议,非常感谢!

问题是您已将两个附加程序都附加到了“ root”记录程序。 如果要有两个记录器,则必须将它们附加到特定的记录器。

我在这里评论了该hierarchy.Root.AddAppender(errorRoller); hierarchy.Root.AddAppender(infoRoller); 因为不再需要将附加程序附加到相关记录器(而不是根目录),所以不再需要它。

查找下面的代码。 在这里,我已经将log和elog作为参数传递给该方法,并分别附加了相关的附加程序。

   private static void Setup2(ILog infoLog, ILog elog)
    {
        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Root.RemoveAllAppenders();

        PatternLayout patternLayout = new PatternLayout();

        patternLayout.ConversionPattern = "%date THREAD [%thread] %logger: %message%newline"; //%-5level
        patternLayout.ActivateOptions();

        RollingFileAppender infoRoller = new RollingFileAppender();

        infoRoller.AppendToFile = true;
        infoRoller.File = @"logs\";
        infoRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
        infoRoller.MaxSizeRollBackups = 3;
        infoRoller.Layout = patternLayout;
        infoRoller.DatePattern = @"IN\FO\_yyyy-MM-dd.\lo\g";
        infoRoller.StaticLogFileName = false;
        infoRoller.ActivateOptions();
        //   hierarchy.Root.AddAppender(infoRoller); //Not appended to the root logger anymore

        //ADDED CODE
        RollingFileAppender errorRoller = new RollingFileAppender();

        errorRoller.AppendToFile = true;
        errorRoller.File = @"logs\";
        errorRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
        errorRoller.MaxSizeRollBackups = 3;
        errorRoller.Layout = patternLayout;
        errorRoller.DatePattern = @"ERROR_yyyy-MM-dd.\lo\g";
        errorRoller.StaticLogFileName = false;
        errorRoller.ActivateOptions();
        //   hierarchy.Root.AddAppender(errorRoller); //Not appended to the root logger anymore

        MemoryAppender memory = new MemoryAppender();

        memory.ActivateOptions();
        hierarchy.Root.AddAppender(memory);
        hierarchy.Root.Level = Level.Debug;
        hierarchy.Configured = true;

        ILog log = infoLog;
        Logger logger = (Logger)log.Logger;
        logger.AddAppender(errorRoller);

        log = elog;
        logger = (Logger)log.Logger;
        logger.AddAppender(infoRoller);
    }

调用方法

    private readonly ILog log = LogManager.GetLogger("GENERAL-LOG");
    private readonly ILog elog = LogManager.GetLogger("ERROR-LOG");

    Logger.Setup2(log,elog);
    log.Debug("prova scrittura in file1");
    elog.Error("prova errore scrittura in file2");

请使用以下代码块替换与Setup()方法相关的代码块。

更改:1.删除了“ hierarchy.Root.AddAppender(infoRoller);” 并评论了“ hierarchy.Root.AddAppender(errorRoller);”。 2.删除了似乎不需要的“ MemoryAppender”。

public static void Setup()
        {


            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
            hierarchy.Root.RemoveAllAppenders();

            PatternLayout patternLayout = new PatternLayout();

            patternLayout.ConversionPattern = "%date THREAD [%thread] %logger: %message%newline"; //%-5level
            patternLayout.ActivateOptions();


            ILog log = LogManager.GetLogger("GENERAL-LOG");
            Logger l = (Logger)log.Logger;

            RollingFileAppender infoRoller = new RollingFileAppender();

            infoRoller.AppendToFile = true;
            infoRoller.File = @"logs\";
            infoRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
            infoRoller.MaxSizeRollBackups = 3;
            infoRoller.Layout = patternLayout;
            infoRoller.DatePattern = @"IN\FO\_yyyy-MM-dd.\lo\g";
            infoRoller.StaticLogFileName = false;
            infoRoller.ActivateOptions();

            l.AddAppender(infoRoller);


            //ADDED CODE

            ILog elog = LogManager.GetLogger("ERROR-LOG");
            Logger el = (Logger)elog.Logger;


            RollingFileAppender errorRoller = new RollingFileAppender();

            errorRoller.AppendToFile = true;
            errorRoller.File = @"logs\";
            errorRoller.RollingStyle = RollingFileAppender.RollingMode.Date;
            errorRoller.MaxSizeRollBackups = 3;
            errorRoller.Layout = patternLayout;
            errorRoller.DatePattern = @"ERROR_yyyy-MM-dd.\lo\g";
            errorRoller.StaticLogFileName = false;

            errorRoller.ActivateOptions();

            el.AddAppender(errorRoller);
            //hierarchy.Root.AddAppender(errorRoller);

            MemoryAppender memory = new MemoryAppender();

            memory.ActivateOptions();
            hierarchy.Root.AddAppender(memory);
            hierarchy.Configured = true;
        }

希望这会帮助你。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM