是否有可能过滤掉特定线程的日志记录?
我使用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”。如何忽略此线程?
我阅读了这篇文章:如何使用Log4Net在不同的文件中记录每个线程的日志?并尝试了该过滤器(但完全没有记录)。
<filter type="log4net.Filter.PropertyFilter">
<key value="threadId" />
<stringToMatch value="TestRunnerThread" />
<acceptOnMatch value="false" />
</filter>
log4net.ThreadContext.Properties["threadId"] = "TestRunnerThread";
,而且Nunit不太可能这样做。 - sgmoore%thread
在conversionPattern
中显示“TestRunnerThread”,那么过滤也应该是可能的。 - dirk