为什么log4Net中没有追踪级别?

36
我在想,为什么log4Net中没有trace level。这个级别似乎缺失了,有时候我需要使用它,例如输出应用程序中正在执行的事件。这个功能是log4J的一部分
我知道我可以创建一个自定义级别,就像这里所讨论的那样,但我不想花时间和精力去做我认为应该成为库本身一部分的事情。
你知道是否有一个log4net扩展库实现了这个功能或者为什么在移植到.net时没有包含它?
3个回答

66

你可以使用扩展方法在log4net中添加详细信息(或跟踪级别)日志。这是我正在使用的:

public static class ILogExtentions
{       
    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);
    }

}

使用示例:

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

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

来源:

http://www.matthewlowrance.com/post/2010/07/14/使用log4net记录跟踪、详细等日志信息.aspx


是否可以获取一个IsTraceEnabled标志来查询日志记录中是否启用了TRACE级别? - galmok
没关系,扩展属性还不存在。看来必须是扩展方法。 - galmok
1
似乎私有字段log从未被使用。 - Can Bud
1
@poizan42,那不正确。反射访问声明记录器实例的类型。例如,在ILog Log = LogManager.GetLogger(typeof(MyLoggingClass));中的MyLoggingClass - Trinova
@galmok 是的,有一种方法可以实现这个功能: Log.Logger.IsEnabledFor(log4net.Core.Level.Trace); - Justin
显示剩余3条评论


9

log4net.ILog接口只公开了Fatal、Error、Warn、Info和Debug级别的方法和属性。

我同意这有点限制,希望能再增加一个级别。但是最优数量的级别可能是“比当前级别多一个”——你总会偶尔需要一个更高的级别。


1
是的,我同意,你可能还想要更多。不过奇怪的是,他们在ILog接口中留下了TRACE,因为它正如nos在他的回答中指出的那样,在SDK中是可用的。 - armannvg
3
我怀疑在设计完ILog接口之后,该功能被添加到SDK中。 - Joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接