Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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将消息记录到所有附件(/all文件)_C#_Log4net - Fatal编程技术网

C# log4net将消息记录到所有附件(/all文件)

C# log4net将消息记录到所有附件(/all文件),c#,log4net,C#,Log4net,我对log4net如何管理appender以及发送给这些appender的消息有疑问 当我将1条消息记录到1个记录器(对应于1个appender)时,消息仍然会在所有日志文件中结束(因此消息似乎会发送到所有appender) 我做错了什么 我设法在单元测试中重现了我的问题: [Test] public void Test() { var hierarchy = (Hierarchy)LogManager.GetRepository();

我对log4net如何管理appender以及发送给这些appender的消息有疑问

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

我做错了什么

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

    [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'
    }
[测试]
公开无效测试()
{
var hierarchy=(hierarchy)LogManager.GetRepository();
var patternLayout=新的patternLayout
{
ConversionPattern=“%date%level%logger-%message%newline”//CreateLayoutPattern(appenderConfiguration.Layout),
};
patternLayout.ActivateOptions();
hierarchy.Configured=true;
对于(变量i=1;i<10;i++)
{
var logFile=Path.Combine(_testLogFolder,$“SomeLog_Test{i}.csv”);
var roller=新的RollingFileAppender
{
名称=$“测试{i}”,
AppendToFile=true,
File=logFile,
CountDirection=1,
布局=图案布局,
立即刷新=真,
//MaxSizerollBackup设置为max int,软件将有一个独立的机制(reaper)来清理旧文件
MaxSizerollBackup=int.MaxValue,
MaximumFileSize=“1MB”,
RollingStyle=RollingFileAppender.RollingMode.Size,
StaticLogFileName=false,
PreserveLogFileNameExtension=true,
阈值=级别。全部
};
滚轮。激活选项();
层次结构.Root.AddAppender(滚轮);
}
//A
LogManager.GetLogger(“Test1”).Info(“任意”);
//现在所有日志文件都包含消息“Whatever”,为什么?!我只登录到“Test1”
}

显然,这是默认行为(我再仔细想想,这是有道理的:)

我需要的是可以实现的。我没有将所有appender添加到hierarchy.Root.AddAppender中,而是为每个appender名称创建记录器,然后将滚动条添加到该记录器中。例如:

var logger = hierarchy.GetLogger("Test1", hierarchy.LoggerFactory);

logger.AddAppender(roller);
logger.Level = Level.All;
logger.Additivity = false;
并删除:

hierarchy.Root.AddAppender(roller);