tags:

views:

316

answers:

3

Hi

I was just wondering why there isn't a trace level in log4Net. This level seems to be missing and I sometimes feel the need to use it, for example to output what events are being executed in an application. This feature is a part of log4J.

I know I can create a custom level like is talked about here but I don't want to put time and effort in something I feel should be part of the library itself.

Do you know about a log4net extension library which implements this or why this wasn't a part of the port to .net ?

+4  A: 

There is a trace level http://logging.apache.org/log4net/release/sdk/log4net.Core.Level.Trace.html

nos
+1  A: 

The log4net.ILog interface only exposes methods and properties for Fatal,Error,Warn,Info and Debug levels.

I agree this is a bit limiting, and would like to see one more level in there. But then the optimal number of levels is probably "one more than the current number of levels" - you'll always find yourself occasionally wanting one more level.

Joe
Yeah I agree, you are probably left with wanting more. Strange though that they left TRACE out of the ILog interface since it's available in the SDK as nos pointed out in his answer
armannvg
I suspect it was added to the SDK after the ILog interface was designed.
Joe
+2  A: 

You can add a Verbose (or Trace level) to log4net by using extension methods. This is what I'm using:

public static class ILogExtentions
{
    private static readonly log4net.ILog log = 
        log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public static void Trace(this ILog log, string message, Exception exception)
    {
        log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
            log4net.Core.Level.Trace, message, exception);
    }

    public static void Trace(this ILog log, string message)
    {
        log.Trace(message, null);
    }

    public static void Verbose(this ILog log, string message, Exception exception)
    {
        log.Logger.Log(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, 
            log4net.Core.Level.Verbose, message, exception);
    }

    public static void Verbose(this ILog log, string message)
    {
        log.Verbose(message, null);
    }

}

Usage example:

public class ClientDAO
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(ClientDAO));

    public void GetClientByCode()
    {
        log.Trace("your verbose message here");
        //....
    }
}

Source:

http://www.matthewlowrance.com/post/2010/07/14/Logging-to-Trace-Verbose-etc-with-log4net.aspx

Wagner Danda da Silva