C# 为什么不是';log4Net中没有跟踪级别吗?

C# 为什么不是';log4Net中没有跟踪级别吗?,c#,vb.net,log4net,C#,Vb.net,Log4net,我只是想知道为什么log4Net中没有。这个级别似乎缺失了,我有时觉得需要使用它,例如输出应用程序中正在执行的事件。此功能是一个重要的功能 我知道我可以创建一个自定义级别,就像前面提到的那样,但我不想把时间和精力放在我认为应该是库本身的一部分的事情上 您知道实现此功能的log4net扩展库吗?或者为什么它不是.net端口的一部分?log4net.Core.level类中有一个跟踪级别log4net.ILog接口仅公开致命、错误、警告、信息和调试级别的方法和属性 我同意这是一个有点限制,并希望看到

我只是想知道为什么log4Net中没有。这个级别似乎缺失了,我有时觉得需要使用它,例如输出应用程序中正在执行的事件。此功能是一个重要的功能

我知道我可以创建一个自定义级别,就像前面提到的那样,但我不想把时间和精力放在我认为应该是库本身的一部分的事情上


您知道实现此功能的log4net扩展库吗?或者为什么它不是.net端口的一部分?

log4net.Core.level类中有一个跟踪级别

log4net.ILog接口仅公开致命、错误、警告、信息和调试级别的方法和属性

我同意这是一个有点限制,并希望看到更多的水平在那里。但是,最佳级别数可能是“比当前级别数多一个”-您总是会发现自己偶尔需要多一个级别。

您可以使用扩展方法向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");
        //....
    }
}
资料来源:


是的,我同意,你可能还需要更多。奇怪的是,他们没有在ILog接口中添加跟踪,因为正如nos在他的回答中指出的那样,它在SDK中是可用的。我怀疑它是在ILog接口设计之后添加到SDK中的。是否可以获取IsTraceEnabled标志来查询日志记录中是否启用了跟踪级别?不要紧,扩展属性还不存在。它似乎必须是一个扩展方法。似乎从未使用过私有字段日志。为什么
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
?这是一种低效的方式,只写
typeof(iLogeExtensions)
@poizan42,这是不正确的。反射访问声明记录器实例的类型。例如
ILog Log=LogManager.GetLogger中的
MyLoggingClass
(typeof(MyLoggingClass))