是否有可能从特定线程中过滤掉日志条目?log4net - 配置为忽略来自特定线程的消息
我使用NUnit运行测试(C#):
using System;
using NUnit.Core;
using log4net;
namespace Main
{
public class Program
{
public static readonly ILogger log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
log.Info("start");
TestPackage package = new TestPackage(@"C:\Test\Main.Tests.dll");
RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
remoteTestRunner.Load(package);
TestResult result = remoteTestRunner.Run(new NullListener(), TestFilter.Empty, true, LoggingThreshold.All);
log.Info("end");
}
}
}
这是我得到的日志记录:
INFO 17:57:24 [1] Main.Program - start
ERROR 17:57:25 [TestRunnerThread] Main.TestedClass - Exception! Relevant for production/okay in test
INFO 17:57:26 [1] Main.Program - end
log4net的每一个记录错误的时间给我发邮件。如果我运行测试,我不想收到这些邮件。 nunit将线程名称设置为:“TestRunnerThread”。我怎样才能忽略这个线程?
我读过这样的:How to log into separate files per thread with Log4Net?并试用了此过滤器(并得到了根本没有日志):
<filter type="log4net.Filter.PropertyFilter">
<key value="threadId" />
<stringToMatch value="TestRunnerThread" />
<acceptOnMatch value="false" />
</filter>
为什么不在配置测试环境中配置另一个appender? –
你正在尝试的方法不仅需要将threadName设置为TestRunnerThread,而且还需要设置log4net属性,例如'log4net.ThreadContext.Properties [“threadId”] =“TestRunnerThread”;'并且Nunit不太可能会这样做。 – sgmoore
@WiktorZychla:这将是该程序的自检。一些测试检查配置是否正确。程序特定的配置和log4net-config都在同一个文件(app.config)中。我将尝试在_self-test-mode_中动态禁用appender。 – dirk