Click here to Skip to main content
11,930,069 members (57,457 online)
Click here to Skip to main content
Add your own
alternative version


21 bookmarked

log4net NonBufferedSmtpAppenderWithSubjectLayout

, 10 Nov 2006 Apache
Rate this:
Please Sign up or sign in to vote.
NonBufferedSmtpAppenderWithSubjectLayout is an appender for the log4net logging framework. The mails it sends are non buffered (1 log message = 1 mail) and the subject of the mail can be customized with a layout

Sample Image - outlook.jpg


For those who don't know log4net, here is a great article about it. One problem that I have with the SmtpAppender is that it sends a lot of log messages in bulk (it buffers default 250 messages and then sends them in 1 mail). It also doesn't allow you to generate the subject of the mail based on the log message. So I decided to write a modified SmtpAppender that sends it mails non buffered (so 1 log message = 1 mail) and generates the subject based on the log message.

log4net Configuration

Look at the conversion pattern in the subject, it uses a layout to be dynamically generated. <--> The default SmtpAppender's subject is static.

<appender name="smtp" 
 <to value="" />
 <from value="" />
 <subject type="HHR.log4net.Layout.PatternLayout, HHR.log4net">
  <conversionPattern value="%date %level %exceptType at [%logger] 
                            on %property{log4net:HostName} by %username" />
 <smtpHost value="" />
 <layout type="log4net.Layout.PatternLayout, log4net">
  <conversionPattern value="%date [%thread] %-5level %logger 
                            [%ndc] &lt;%property{user}&gt; - 
                            %message%newline" />
 <filter type="log4net.Filter.LevelRangeFilter">
  <levelMin value="WARN" />
  <levelMax value="FATAL" />


I modified the Subject property from a string to a ILayout.

//I can use a layout for my subject!!!!!!!!!!!!

public ILayout Subject 
   get { return m_subject; }
   set { m_subject = value; }

I also modified the base class of the Appender from BufferingAppenderSkeleton to AppenderSkeleton. I added an ExceptionTypePatternConverter class that is derived from the PatternLayoutConverter class so that I can use the %exceptType pattern that just returns the class name of the thrown exception.


This looks like a more useful version of the SmtpAppender than the one inside log4net. I included a NUnit test case to play around with. Just modify the 'smtpHost' and the 'to' values in the App.config and off you go.


Updated 2006/13/10

  • Added own PatternLayout with %exceptType pattern!
  • Added log4net configuration samples for some other appenders like AdoNetAppender, TraceAppender, ConsoleAppender, RollingFileAppender and EventLogAppender


This article, along with any associated source code and files, is licensed under The Apache License, Version 2.0


About the Author

Software Developer (Senior)
Belgium Belgium
No Biography provided

You may also be interested in...

Comments and Discussions

Generalfurther customize subject... Pin
Syborg7710-Nov-06 3:21
memberSyborg7710-Nov-06 3:21 
GeneralRe: further customize subject... [modified] Pin
DaBuddhaMan10-Nov-06 9:53
memberDaBuddhaMan10-Nov-06 9:53 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.151126.1 | Last Updated 10 Nov 2006
Article Copyright 2006 by DaBuddhaMan
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid