क्या किसी विशिष्ट थ्रेड से लॉग प्रविष्टियों को फ़िल्टर करने की संभावना है?log4net - किसी विशिष्ट थ्रेड से संदेशों को अनदेखा करने के लिए confgure
मैं परीक्षण चल रहा है (ग #) के लिए nunit का उपयोग करें:
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 मुझे एक मेल हर बार एक त्रुटि लॉग होता है भेजता है। अगर मैं परीक्षा चलाता हूं, तो मैं उन मेलों को प्राप्त नहीं करना चाहता हूं। नूनिट थ्रेड-नाम को सेट करता है: "टेस्टरुनर थ्रेड"। मैं इस धागे को कैसे नजरअंदाज कर सकता हूं?
मैं इसे पढ़ लिया है: 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>
आप परीक्षण वातावरण में appenders का एक और सेट क्यों कॉन्फ़िगर नहीं करते? –
जिस विधि को आप कोशिश कर रहे हैं उसे थ्रेडनाम को टेस्टरुनर थ्रेड पर सेट करने की आवश्यकता है, लेकिन लॉग 4नेट प्रॉपर्टी जैसे 'log4net.ThreadContext.Properties ["threadId"] = "TestRunnerThread" सेट करने के लिए कुछ भी चाहिए; और यह असंभव है कि नुनिट ऐसा कर रहे हो – sgmoore
@WiktorZychla: यह कार्यक्रम का एक आत्म परीक्षण होगा। कुछ परीक्षण जांचते हैं कि कॉन्फ़िगरेशन सही है या नहीं। प्रोग्राम-विशिष्ट कॉन्फ़िगरेशन और log4net-config दोनों एक ही फ़ाइल (app.config) में हैं। मैं _self-test-mode_ में गतिशील रूप से परिशिष्ट को अक्षम करने का प्रयास करूंगा। – dirk