« "The dependency whatever.dll cannot be c... | Main | Obscure Off-Topic Tip of the Day - How t... »

Log4Net was ported over from the stunning and wonderful Log4J.  Log4Net supports a large series of Appenders that let you, via a config file, setup a series of destinations for your logging calls.  For example, without recompiling your app, you can send Logging information to a Database, or a File, or ASP.NET Tracing.  It's very flexible, and easier to use (IMHO) than the Microsoft Logging Application Block.

Additionally there's a concept called a Layout that affects the logging data and either formats or adds extra information like the thread id, username, etc.  It's very powerful because your Layout will work for and affect any Appender which makes for nice reuse.  So, for example:

    <!-- A1 is set to be a ConsoleAppender -->    
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="Corillian.Whatever.Log4NetStuff.CustomPatternLayout, Corillian.Whatever.Log4NetStuff">
<conversionPattern value="%-4timestamp [%thread] %-5level %logger %ndc - %message%newline %G" />
</layout>
</appender>

Here's we're outputing the message, as well as timestamp and thread info. 

I wanted to add my OWN CustomPatternLayout and add additionally %whatever tokens.  This is done all the time in Log4J.

HOWEVER, in the log4net source, there's a function "FinalizeConverter" in PatternParser.cs that you need to override when you derive you own CustomPatternParser from PatterParser.  But, it's not marked virtual.  Crap. 

It makes total sense though, as everything in Java (where this code was ported from) is virtual and can be overridden.  They just forgot to set that log4net 1.2-beta8.  That's why it's beta. :)

So, if you make this change in PatternParser line 237:

protected virtual void FinalizeConverter(char c)

...then you'll be all set to do something like this:

public class CustomPatternLayout : log4net.Layout.PatternLayout
{
  
public SecurityPatternLayout() : this(log4net.Layout.PatternLayout.DEFAULT_CONVERSION_PATTERN){ //whatever }
  public SecurityPatternLayout(string pattern) : base(pattern){ //whatever }
  protected override PatternParser CreatePatternParser(string pattern)  //where we override and return US as a PatternParser
  {
    return new SecurityPatternParser(pattern == String.Empty ? log4net.Layout.PatternLayout.DEFAULT_CONVERSION_PATTERN : pattern);
  }
}

public class SecurityPatternParser : log4net.helpers.PatternParser
{
 
public SecurityPatternParser(string pattern) : base(pattern){}
 protected override void FinalizeConverter(char c)
 {
  if (c == 'G') //where 'G' is your custom token like %G in the format string
 
{
   
AddConverter(new SecurityPatternConvertor()); //Where we add ourselves into the mix, since our token (%G) appears in the format string
 
}
  else base.FinalizeConverter(c);
}

public class SecurityPatternConvertor : log4net.helpers.PatternConverter
{
 
public SecurityPatternConvertor() : base(){}
 
public SecurityPatternConvertor(FormattingInfo formattingInfo) : base(formattingInfo) {}
 
 override protected string Convert(LoggingEvent loggingEvent)
 
{
    
return MessWithThisMessage(loggingEvent.RenderedMessage); //Where we mess with the string however we decide %G should affect it
  
}
}

Tracked by:
"Log4Net" (Giddy Up!) [Trackback]


Friday, July 09, 2004 6:43:29 AM (Pacific Standard Time, UTC-08:00)
Any word on a WMI Appender for log4Net?

Too many large clients with big data centers use things like IBM Tivoli, CA Unicenter, HP OpenView, or MS MOM (or the likes) to monitor all the different applications installed. A common thread I find is that they all tie in to WMI. So Ops folks really want/need WMI support for various alerts, warnings, metrics, audits, etc. coming out of the applications we build. So then I'm stuck with EIF/MS Logging block.
Friday, July 09, 2004 7:10:57 AM (Pacific Standard Time, UTC-08:00)
Hello Scoot, I've been reading you for a while. I guess you now have to add Log4Net to your list of ultimate tools. :-)
josemanners@hotmail.com (Jose Manners)
Friday, July 09, 2004 8:46:10 AM (Pacific Standard Time, UTC-08:00)
Dude, I TOLD you that you were going to have to modify the code. Nobody listens to me... :)
Friday, July 09, 2004 9:44:24 AM (Pacific Standard Time, UTC-08:00)
Travis was RIGHT! Oh lawd! ;) Yes. You were right. :)
Scott Hanselman
Comments are closed.

Contact

Sponsors

Hosting By

Hot Topics

Tags

Calendar

<November 2009>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

Archives

November, 2009 (5)
October, 2009 (19)
September, 2009 (11)
August, 2009 (12)
July, 2009 (21)
June, 2009 (26)
May, 2009 (16)
April, 2009 (13)
March, 2009 (17)
February, 2009 (17)
January, 2009 (18)
December, 2008 (32)
November, 2008 (17)
October, 2008 (22)
September, 2008 (16)
August, 2008 (14)
July, 2008 (25)
June, 2008 (19)
May, 2008 (17)
April, 2008 (17)
March, 2008 (26)
February, 2008 (21)
January, 2008 (28)
December, 2007 (19)
November, 2007 (17)
October, 2007 (31)
September, 2007 (39)
August, 2007 (37)
July, 2007 (43)
June, 2007 (37)
May, 2007 (32)
April, 2007 (38)
March, 2007 (29)
February, 2007 (46)
January, 2007 (31)
December, 2006 (27)
November, 2006 (31)
October, 2006 (32)
September, 2006 (39)
August, 2006 (34)
July, 2006 (40)
June, 2006 (18)
May, 2006 (31)
April, 2006 (34)
March, 2006 (30)
February, 2006 (38)
January, 2006 (44)
December, 2005 (19)
November, 2005 (34)
October, 2005 (24)
September, 2005 (37)
August, 2005 (20)
July, 2005 (24)
June, 2005 (33)
May, 2005 (16)
April, 2005 (22)
March, 2005 (34)
February, 2005 (15)
January, 2005 (37)
December, 2004 (28)
November, 2004 (30)
October, 2004 (34)
September, 2004 (22)
August, 2004 (34)
July, 2004 (18)
June, 2004 (64)
May, 2004 (49)
April, 2004 (21)
March, 2004 (29)
February, 2004 (29)
January, 2004 (36)
December, 2003 (25)
November, 2003 (24)
October, 2003 (59)
September, 2003 (42)
August, 2003 (24)
July, 2003 (44)
June, 2003 (29)
May, 2003 (21)
April, 2003 (30)
March, 2003 (27)
February, 2003 (47)
January, 2003 (50)
December, 2002 (31)
November, 2002 (38)
October, 2002 (44)
September, 2002 (15)
May, 2002 (2)
April, 2002 (4)

Google Ads