2012-09-26 129 views
5

是否有可能从特定线程中过滤掉日志条目?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> 
+1

为什么不在配置测试环境中配置另一个appender? –

+0

你正在尝试的方法不仅需要将threadName设置为TestRunnerThread,而且还需要设置log4net属性,例如'log4net.ThreadContext.Properties [“threadId”] =“TestRunnerThread”;'并且Nunit不太可能会这样做。 – sgmoore

+0

@WiktorZychla:这将是该程序的自检。一些测试检查配置是否正确。程序特定的配置和log4net-config都在同一个文件(app.config)中。我将尝试在_self-test-mode_中动态禁用appender。 – dirk

回答

-2

我没有用log4net的,但一个简单的建议是将ID更改为类似[email protected]在您指定的电子邮件ID的地方接收日志邮件...

同意应该有东西配置为不发送电子邮件每次,但这可以是一种解决方法,直到你找到一个体面的解决方案

While您正在使用日志记录,我还建议您查看Microsoft企业库日志记录应用程序块。在您的应用程序中配置和使用是非常容易的。

链接http://msdn.microsoft.com/en-us/library/ff664569(v=pandp.50).aspx

相关问题