Hello. In response to Nicko's reply to my first post on the log4net list: http://tinyurl.com/a24cc http://www.mail-archive.com/log4net-user%40logging.apache.org/msg00886.html
I've written a collection of PatternConverter classes to make log4net play nicely with Asp.Net. They allow for properties of the Application, Cache, Context, HttpRuntime, Request, Response, and Session to be used to configure log4net. Values from these objects may also be inserted into log messages without first having to place the items in the MDC in code. This may offer more run-time style debugging of applications without having to take the application down and add additional logging statements. The ability to access sub-properties also exists (i.e. Response.Cookies). Here are some quick examples followed by more detailed examples followed by some questions. The aspnet- style naming was based on a certain other .Net logger whose name begins with an "N" and ends with "Log". <conversionPattern value="%aspnet-httpRuntime{AppDomainAppPath}\Logs\log.txt" /> <conversionPattern value="%p %d %aspnet-request{RawUrl} - %m%n" /> <conversionPattern value="%p %d %aspnet-request-form{txtDateLastUpdated} - %m%n" /> <conversionPattern value="%p %d %aspnet-response{ContentType} %aspnet-response-cookies{MyCookie} - %m%n" /> <conversionPattern value="%p %d %aspnet-context{TimeStamp} - %m%n" /> <conversionPattern value="%p %d %aspnet-response-cookies{MyCookie} - %m%n" /> Here is a complete list of classes in the AspNetPatternConveters namespace: ApplicationPatternConverter CachePatternConverter ContextPatternConverter ContextPatternConverter+Items ContextPatternConverter+User HttpRuntimePatternConverter RequestPatternConverter RequestPatternConverter+QueryString RequestPatternConverter+Form RequestPatternConverter+ServerVariables RequestPatternConverter+Cookies RequestPatternConverter+Params ResponsePatternConverter ResponsePatternConverter+Cache+VaryByHeaders ResponsePatternConverter+Cache+VaryByParams ResponsePatternConverter+Cookies ResponsePatternConverter+ContextEncoding SessionPatternConverter SessionPatternConverter+Contents I won't list every possible property in this email but just about everything is exposed to log4net: Context.IsCustomErrorEnabled Context.IsDebuggingEnabled Context.SkipAuthorization Context.Timestamp Context.Items Context.User.Identity HttpRuntime.AppDomainAppPath HttpRuntime.AppDomainAppVirtualPath Request.ApplicationPath Request.ContentLength Response.Cookies Response.QueryString ... A more complete example of the first part of this email can be found here: http://www.ronosaurus.com/log4net/AspNetPatternConverters1.txt If this issue is addressed: http://issues.apache.org/jira/browse/LOG4NET-30 The file could be shortened to just: http://www.ronosaurus.com/log4net/AspNetPatternConverters2.txt The classes follow this style of coding to allow access to properties: http://www.ronosaurus.com/log4net/ContextPatternConverter.png This style of coding is used to allow access to collection-like objects: http://www.ronosaurus.com/log4net/QueryString.txt This issue is preventing me from specifing what property of a Cookie (i.e. Domain, Value, etc.) should appear in the log file: http://issues.apache.org/jira/browse/LOG4NET-31 Now for some questions... Should there be try/catch blocks around the code or is checking for null values good enough? I'm not sure how to handle access to certain properties like the Count property of the Cache object. If I use this conversion pattern: <conversionPattern value="%cache{Count} - %m%n" /> I'm unable to determine which of the following the user wants displayed: Cache.Count Cache["Count"] Is there a more appropriate naming convention for my classes? The design for the inner classes is based off of FileAppender's inner file locking classes. I'd like to hear some feedback and have an chance to make somemore minor changes to the code before I make it availabe for download. Comments, questions, cool, not cool, don't care? - Ron