Feb 26, 2015

Log4Net - Tips

In log4net.xml you define level of messages you wish to log.

  <root>
    <!-- OFF, FATAL, ERROR, WARN, DEBUG, INFO, ALL -->
    <level value="WARN" />
    <appender-ref ref="FileAppender" />
  </root>

Question is how to properly use these levels in your code?
The provided comment is incorrect.
Here is the correct hierarchy of levels order from most important to least important.:

FATAL
ERROR
WARN
DEBUG
INFO

Idea is when for example you set FATAL level ONLY log.Fatal methods will finish in your log and nothing else.
For ERROR level you will get ERROR + FATAL.
With WARN you have WARN + ERROR + FATAL.

Etc.  you got idea.


Some people use provided helpers: 

IsInfoEnabled()
IsDebugEnabled()

etc. 
If you DO NOT place some time consuming activity in your log.Info   statement forget it, you don't need it!
Log.Info will determine based on LEVEL from XML should it or should it not get written into log. Idea is with IsInfoEnabled() to suppress even start of execution log.Info().

Make different logging level for different types

When you create your logger instance in every type make sure to use typeof so that you can reference it, when needed, in Log4Net.xml as specific appender for that type.

readonly ILog log = LogManager.GetLogger(typeof(TypeName));

Watch it ! When configuring logging for specific type:

<logger name="MyNameSpace.MyType">
     <level value="DEBUG"/>
</logger>

; make sure to make fully qualify name for type including namespace.

Log different types in different log files

For example you wish to make logs for specific .NET type in different log apart from main.

Make specific new Appender in new log file :

<appender name="HelperAppender" type="log4net.Appender.RollingFileAppender">
    <param name="File" value="helper.log"/>
    <param name="DatePattern" value="yyyy.MM.dd" />
    <param name="RollingStyle" value="Size" />
    <param name="maxSizeRollBackups" value="10" />
    <param name="maximumFileSize" value="100KB" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss ffff} [%-3t] %-5p %logger{1}.%method: %message%newline" />
    </layout>  
  </appender>

Create new logger section with fully qualified .NET type name you wish to log and reference to above created Appender:

  <logger name="Log4NetTest.Helper">
    <level value="INFO"/>
    <appender-ref ref="HelperAppender"/>
  </logger>