The filters are a chain. Each filter in the chain has three options: Accept, Deny, Neutral. The Accept and Deny option are effective immediate and the other filters are ignored. If the filter selects the Neutral option then the logging event is passed to the next filter in the chain. When the logging event reaches the end of the chain it is implicitly accepted.
The PropertyFilter will Accept if the property value matches the string specified, otherwise it will allow the event to fall through to the next filter. Therefore you need a deny all filter at the end of the chain to ignore all other events. This design allows the filter chain to be set up very flexibly, it can be used to allow several different conditions or it can be reversed to deny only those same conditions. Cheers, Nicko > -----Original Message----- > From: Billy Barnum [mailto:[EMAIL PROTECTED] > Sent: 29 November 2005 23:38 > To: 'Log4NET User' > Subject: RE: Trouble with PropertyFilter > > As always, very helpful, Ron. Thanks, that worked. > > Just so I'm clear, though ... > > If these filters are additive, then why do I get everything > if I don't specify any filter at all? And if they're > subtractive, why do I need the DenyAllFilter at all? Or is > there something special about DenyAllFilter? > > See what I mean? How do these filters work together? Is there > a documentation section that outlines it so you don't hafta > 'splain? I didn't see one. > > -BillyB > > > WILLIAM BARNUM > [EMAIL PROTECTED] > > > -----Original Message----- > From: Ron Grabowski [mailto:[EMAIL PROTECTED] > Sent: Tuesday, November 29, 2005 3:13 PM > To: Log4NET User > Subject: Re: Trouble with PropertyFilter > > <filter type="log4net.Filter.PropertyFilter"> > <Key value="LogEventCategory" /> > <StringToMatch value="AssertionHandling" /> </filter> > <filter type="log4net.Filter.DenyAllFilter" /> > > --- Billy Barnum <[EMAIL PROTECTED]> wrote: > > > I'm having trouble making a PropertyFilter work with some custom > > properties of mine, and the archives didn't turn up anything. I'm > > probably not understanding what PropertyFiltering is or am > > fat-fingering something; help appreciated. > > > > Expected Behavior: a certain FileAppender named 'AssertionException' > > will > > only contain Events with a custom property > 'LogEventCategory' set to a > > value of 'AssertionHandling'. > > Actual Behavior: no filtering takes place; all events > logged to this > > appender's output file. > > > > The appender definition is: > > > > <appender name="AssertionException" > > type="log4net.Appender.FileAppender"> > > <filter type="log4net.Filter.PropertyFilter"> > > <Key value="LogEventCategory" /> > > <StringToMatch value="AssertionHandling" /> > > </filter> > > <file value="..\..\AssertionException.txt" /> > > <appendToFile value="false" /> > > <layout type="log4net.Layout.PatternLayout"> > > <conversionPattern value="[%date] [%thread] [%-5level] > > [%property{LogEventContext}] [%property{LogEventCategory}] > [%logger] > > [%ndc] [%property{LogEventType}] [%property{LogEventId}] > > [%property{LogEventUserId}] [%message]%newline" /> > > </layout> > > </appender> > > > > Internal debugging output shows nothing untoward that I can see; I > > found the > > following: > > > > log4net: XmlHierarchyConfigurator: Loading Appender > > [AssertionException] > > type: [log4net.Appender.FileAppender] > > log4net: XmlHierarchyConfigurator: Setting Property [Key] to String > > value [LogEventCategory] > > log4net: XmlHierarchyConfigurator: Setting Property > [StringToMatch] to > > String value [AssertionHandling] > > log4net: XmlHierarchyConfigurator: Setting Collection Property > > [AddFilter] to object [log4net.Filter.PropertyFilter] > > > > Here's subset of log output showing property 'LogEventCategory' > > values of > > 'ExecutionTrace' (not desired) and 'AssertionHandling': > > > > [2005-11-29 12:18:23,159] [8164] [DEBUG] [BMTSecurity] > > [ExecutionTrace] [BMT.Shared.Security.Guard.SecurityGuard] [(null)] > > [EndMethod] [Authenticate] [BMT\bbarnum] [End Authenticate()] > > [2005-11-29 12:18:23,159] [8164] [FATAL] [NUnit] > [AssertionHandling] > > [BMT.Shared.Security.Test.tSecurityGuard] [(null)] > > [AssertionException] [Authenticate_0002] [BMT\bbarnum] [===== > > Exception # 0===== > > ExceptionType: AssertionException > > Message: > > Source: nunit.framework > > StackTrace: at NUnit.Framework.Assert.Fail(String message, > > Object[] args) > > at NUnit.Framework.Assert.IsTrue(Boolean condition) > > at > BMT.Shared.Security.Test.tSecurityGuard.Authenticate_0002() in > > c:\data\code\visual studio > > > projects\bmt\shared\vertical\bmt.shared.vl.security\test\class > \tsecurityguar > > d.cs:line 123 > > TargetSite: Void Fail(System.String, System.Object[]) ] > > > > So what am I not getting, here? > > > > -BillyB > > > > WILLIAM BARNUM > > [EMAIL PROTECTED] > > > > > > > >