App对象中的Log4Net?

Dav*_*man 5 wpf log4net

我开始使用Log4Net作为日志记录组件登录WPF桌面应用程序.这是我的问题:在一个简单的桌面应用程序中,有没有理由不将我的记录器实例化为App类(App.xaml.cs)的属性,就像这样?

public partial class App : Application
{
        private static readonly ILog p_Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        public ILog Logger
        {
            get { return p_Logger; }
        }

        #endregion
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许我调用记录器

Ken*_*art 7

有一个原因让人想起:因为App类的静态构造函数是将运行的代码的第一位,所以ILog在配置log4net之前,您将实例化实例.因此,您的ILog实例将无法使用.一般来说,你会做这样的事情:

public partial class App : Application
{
    private static ILog log;

    static App()
    {
        XmlConfigurator.Configure();
        log = LogManager.GetLogger(typeof(App));
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这项MethodBase业务真的让我感到畏缩.为什么不用typeof(App)?无论如何,你不应该复制/粘贴代码而不进行验证......并且typeof(App)可以使用重构工具正常工作......