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