【问题标题】:Why isn't there a trace level in log4Net?为什么 log4Net 中没有跟踪级别?
【发布时间】:2009-09-08 15:29:55
【问题描述】:

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

我知道我可以创建一个自定义关卡,就像 here 所讨论的那样,但我不想将时间和精力投入到我认为应该是库本身的一部分的事情上。

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

【问题讨论】:

    标签: c# vb.net log4net


    【解决方案1】:

    您可以使用扩展方法将详细(或跟踪级别)添加到 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/Logging-to-Trace-Verbose-etc-with-log4net.aspx

    【讨论】:

    • 是否可以获取 IsTraceEnabled 标志来查询是否在日志记录中启用了 TRACE 级别?
    • 没关系,扩展属性还不存在。它似乎是一种扩展方法。
    • 好像从来没有使用过私有字段日志。
    • 为什么System.Reflection.MethodBase.GetCurrentMethod().DeclaringType?那是写typeof(ILogExtentions)的低效方式
    • @poizan42 这是不正确的。反射访问声明记录器实例的类型。例如ILog Log = LogManager.GetLogger(typeof(MyLoggingClass));中的MyLoggingClass
    【解决方案2】:

    【讨论】:

      【解决方案3】:

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

      我同意这有点限制,并希望在那里再看到一个级别。但是,最佳的关卡数量可能是“比当前的关卡数量多一个”——你总是会发现自己偶尔想要多一个关卡。

      【讨论】:

      • 是的,我同意,您可能还想要更多。奇怪的是,他们将 TRACE 排除在 ILog 界面之外,因为它在 SDK 中可用,正如他在回答中指出的那样
      • 我怀疑是在ILog接口设计后才添加到SDK中的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多