以编程方式配置log4net

时间:2012-04-23 22:25:53

标签: c#-4.0 log4net fileappender

我正在尝试正确配置log4net。首先,我需要提供一些关于我到目前为止(并成功)使用它的背景知识。

我的应用程序有一个log4net配置文件,它定义了应该将所有数据记录到的FileAppender。我的所有程序集都有一个ILog成员变量,并将其设置为LogManager.GetLogger( typeof( myclass)),其中 myclass 是正在记录的类。

这一切都很有效。

现在我的组件使用方式略有不同。它可以多次实例化,并且要求每个实例都记录到自己的文件中。我能够以编程方式使用它,并放弃logging.xml文件。

        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Root.Level = log4net.Core.Level.All;            
        hierarchy.Configured = true;

        string module_path = MyCompany.Shared.Utils.FileSystem.GetModulePath();
        string folder = module_path + "\\logs\\";
        string path = String.Format("{0}{1}-log.txt", folder, name);

        _log = LogManager.GetLogger( name);

        var fa = new log4net.Appender.FileAppender() { Name = name, File = path, AppendToFile = true};
        var layout = new PatternLayout { ConversionPattern = "%date{{yyyy-MM-dd-HH_mm_ss.fff}} [%thread] %-5level %logger - %message%newline" };
        layout.ActivateOptions();
        fa.Layout = layout;
        fa.ActivateOptions();

        ((Logger)_log.Logger).AddAppender( fa);

这也很有效。现在问题就出现了:上面的程序集使用另一个也使用log4net的程序集。但是,该程序集期望有一个已经配置好使用的记录器,显然我以编程方式设置log4net的方式阻止了它的工作。

我启用了内部log4net调试,我看到的错误信息非常明确,但我不确定如何(最好)解决问题:

log4net: Logger: No appenders could be found for logger [test_logger] repository [log4net-default-repository]
log4net: Logger: Please initialize the log4net system properly.
log4net: Logger:    Current AppDomain context information: 
log4net: Logger:       BaseDirectory   : C:\Sample\bin\Debug\
log4net: Logger:       FriendlyName    : SampleTestApp.vshost.exe
log4net: Logger:       DynamicDirectory: 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]

我假设已创建记录器,因为即使我明确使用LoggerFactory创建“test_logger”记录器,我也会收到相同的错误。因此,只需要弄清楚如何为该记录器创建appender。我曾尝试使用前面的代码为此记录器创建FileAppender,但即使代码运行,我也会遇到同样的错误。

有人可以建议让我尝试让它发挥作用吗?

编辑 - 我应该澄清我真的希望所有日志消息都进入由测试应用程序创建的FileAppender。我想避免使用单独的文件(每个程序集一个)。

0 个答案:

没有答案