【发布时间】:2012-09-18 08:15:45
【问题描述】:
是否有可能从特定线程中过滤掉日志条目?
我使用 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 不太可能这样做。 -
@WiktorZychla:这将是程序的自测。一些测试检查配置是否正确。程序特定配置和 log4net-config 都在同一个文件 (app.config) 中。我将尝试在 self-test-mode 中动态禁用附加程序。
-
@sgmoore:是的。 Nunit 不会这样做。但我虽然:如果 log4net 可以通过
%thread在conversionPattern中向我显示“TestRunnerThread”,那么它也应该可以过滤。 -
propertyFilter 仅适用于属性,%thread 不是属性,而是称为“转换模式名称”的东西,我认为没有办法过滤这些“转换模式名称” .
标签: c# logging nunit log4net log4net-filter