【问题标题】:Log4Net: How to get Logger?Log4Net:如何获取 Logger?
【发布时间】:2010-08-19 16:37:22
【问题描述】:

我已经使用 Log4Net 几个月了,我为每个类创建了一个新的 Logger 作为成员变量,如下所示:

// Member variables
private readonly ILog m_Logger = LogManager.GetLogger("MyClass");

然后我从记录的类中的每个方法调用记录器,如下所示:

// Initialize
m_Logger.Info("MyClass.MyMethod() invoked.");
...
m_Logger.Debug("MyClass.MyMethod() did something...");
...
m_Logger.Info("MyClass.MyMethod() completed.");

有什么理由不使用这种方法,还是有更好的方法来设置记录器?感谢您的帮助。

【问题讨论】:

    标签: c# logging log4net


    【解决方案1】:

    您的记录器可能应该是静态的,并且您可以利用其他覆盖,例如使用类型:

    private static readonly ILog m_Logger = LogManager.GetLogger(typeof(MyClass));
    

    为了提高性能,您还应该在调用适当的日志函数之前检查您所在的日志级别。例如:

    if (m_Logger.IsDebugEnabled) { m_Logger.DebugFormat("Starting {0}", MethodBase.GetCurrentMethod().ToString()); }
    

    上面的例子也展示了使用反射来获取方法名。

    【讨论】:

    • '使用反射获取方法名称' - 但您不需要要求反射进行堆栈遍历并咨询方法名称的程序集元数据:您只需将其键入源文件
    • 这只是一个例子。使用反射可以简单地将行剪切和粘贴到多个位置,而无需为正确的方法名称编辑行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多