【问题标题】:log4net logs message into all appenderes (/all files)log4net 将消息记录到所有 appenderes(/所有文件)
【发布时间】:2019-10-25 21:22:31
【问题描述】:

我对 log4net 如何管理附加程序以及发送到这些附加程序的消息有疑问。

当我将 1 条消息记录到 1 个记录器(对应于 1 个附加程序)时,消息仍然会出现在所有日志文件中(因此消息似乎会发送到所有附加程序)

我做错了什么?!

我设法在单元测试中重现了我的问题:

    [Test]
    public void Test()
    {
        var hierarchy = (Hierarchy)LogManager.GetRepository();

        var patternLayout = new PatternLayout
        {
            ConversionPattern = "%date %level %logger - %message%newline" //CreateLayoutPattern(appenderConfiguration.Layout),
        };
        patternLayout.ActivateOptions();

        hierarchy.Configured = true;
        for (var i = 1; i < 10; i++)
        {
            var logFile = Path.Combine(_testLogFolder, $"SomeLog_Test{i}.csv");

            var roller = new RollingFileAppender
            {
                Name = $"Test{i}",
                AppendToFile = true,
                File = logFile,
                CountDirection = 1,
                Layout = patternLayout,
                ImmediateFlush = true,
                // MaxSizeRollBackups is set to max int, software will have an independent mechanism in place (reaper) to clean up old files
                MaxSizeRollBackups = int.MaxValue,
                MaximumFileSize = "1MB",
                RollingStyle = RollingFileAppender.RollingMode.Size,
                StaticLogFileName = false,
                PreserveLogFileNameExtension = true,
                Threshold = Level.All
            };

            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
        }

        // A
        LogManager.GetLogger("Test1").Info("Whatever");

        // Now the ALL of the log files contain the message "Whatever", why?!?! I only logged to 'Test1'
    }

【问题讨论】:

    标签: c# log4net


    【解决方案1】:

    显然,这是默认行为(当我再考虑一下时,这是有道理的 :))。

    我需要的是可以实现的。我不必将所有附加程序添加到hierarchy.Root.AddAppender,而是为每个附加程序名称创建记录器,然后将滚轮添加到该记录器。例如:

    var logger = hierarchy.GetLogger("Test1", hierarchy.LoggerFactory);
    
    logger.AddAppender(roller);
    logger.Level = Level.All;
    logger.Additivity = false;
    

    并删除:

    hierarchy.Root.AddAppender(roller);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多