आप के लिए अपने व्यापार की जरूरत है कस्टम फ़िल्टर बना सकते हैं:
public class UserRequestFilter : FilterSkeleton
{
public override FilterDecision Decide(LoggingEvent loggingEvent)
{
if (loggingEvent == null)
throw new ArgumentNullException("loggingEvent");
string userId = (string)loggingEvent.Properties["UserId"];
string url = (string)loggingEvent.Properties["Url"];
if (String.IsNullOrEmpty(UserId) || String.IsNullOrEmpty(Url))
return FilterDecision.Neutral;
if (UserId.Equals(userId) && Url.Equals(url, StringComparison.CurrentCultureIgnoreCase))
return AcceptOnMatch ? FilterDecision.Accept : FilterDecision.Deny;
return FilterDecision.Neutral;
}
public bool AcceptOnMatch { get; set; }
public string UserId { get; set; }
public string Url { get; set; }
}
विन्यास इस तरह दिखेगा:
<filter type="Namespace.UserRequestFilter, Assembly">
<userId value="TESTUSER"/>
<url value="/foo/foobar.aspx"/>
<acceptOnMatch value="true"/>
</filter>
इसके अलावा, आप यौगिक फ़िल्टर बना सकते हैं, लेकिन मैं उपयोग करने के लिए जिस तरह से नहीं मिला यह विन्यास में है। ऐसा लगता है कि यह केवल प्रोग्राम के रूप में (जो^_^बेकार है) संलग्न किया जा सकता है:
IAppenderAttachable logger = (IAppenderAttachable)_log.Logger;
AppenderSkeleton appender = (AppenderSkeleton)logger.GetAppender("appenderName");
CompoundFilter compoundFilter = new CompoundFilter();
compoundFilter.AddFilter(new PropertyFilter() { Key = "UserId", StringToMatch = "TEST" });
compoundFilter.AddFilter(new PropertyFilter() { Key = "Url", StringToMatch = @"/foo/foobar.aspx" });
appender.AddFilter(compoundFilter);
logger.AddAppender(appender);
[अद्यतन]
यहाँ चाल है कि आप उपयोग कर सकते हैं - फिल्टर बनाने के लिए, जो फिल्टर नीचे सभी फिल्टर की जाँच करेगा श्रृंखला:
public class DenyAllSubsequentFilter : FilterSkeleton
{
public override FilterDecision Decide(LoggingEvent loggingEvent)
{
IFilter nextFilter = Next;
if (nextFilter == null)
return FilterDecision.Accept;
while (nextFilter != null)
{
if (nextFilter.Decide(loggingEvent) != FilterDecision.Deny)
return FilterDecision.Accept;
nextFilter = nextFilter.Next;
}
return FilterDecision.Deny;
}
}
उपयोग:
<filter type="Namespace.DenyAllSubsequentFilter, Assembly"/>
<filter type="log4net.Filter.PropertyFilter">
<key value="UserId" />
<stringToMatch value="TEST" />
<acceptOnMatch value="false" />
</filter>
<filter type="log4net.Filter.PropertyFilter">
<key value="Url" />
<stringToMatch value="/foo/foobar.aspx" />
<acceptOnMatch value="false" />
</filter>
इस फिल्टर लॉगिंग संदेश अगर सब सु इनकार करेगा बाद के फिल्टर इसे अस्वीकार कर देंगे।
स्रोत
2012-01-12 00:16:08
हाँ, मैं कंपाउंड फ़िल्टर (जैसे आपके एडफिल्टर) के साथ आया था, लेकिन यह नहीं लगा कि कॉन्फ़िगरेशन के माध्यम से आंतरिक फ़िल्टर कैसे जोड़ना है। यह वास्तव में अच्छी चाल है :) सार्वजनिक IFilter फ़िल्टर {सेट {filter.Add (मान); }} –
धन्यवाद, मदद की। यह दयालु है कि यह मानक लॉग 4नेट सुविधा नहीं है। –