如何使用Extended Log4netLogger.cs在运行时为appender设置日志文件路径?

时间:2013-05-02 16:28:12

标签: log4net castle-windsor castle

我想知道如何使用ExtendedLog4NetLogger.cs 在运行时或使用LoggingFacility动态更改日志文件路径?

这应该类似于直接使用log4net:

log4net.GlobalContext.Properties["LogName"] = logName; 

如果我注册log4net集成,我将如何访问ExtendedLogger:

container.AddFacility<LoggingFacility>(f => f.UseLog4Net());

更新:我使用以下代码注册扩展记录器

container.AddFacility<LoggingFacility>(LoggerImplementation.ExtendedLog4net).WithConfig(configFile).ToLog(Lo‌gger)); 

我没有得到运行时异常,并且logger不是null实例,但是我没有看到使用全局属性创建的日志文件,我还为appender设置了配置值:

{ {2}}

如果我只是将配置文件中的文件属性设置为完整路径,它确实有效。我想知道它是否无效,因为在设置全局变量之前完成了配置。

2 个答案:

答案 0 :(得分:2)

extendedlogger.GlobalProperties["logName"] = logName;

要启用扩展记录器,您需要执行以下操作:

container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.ExtendedLog4net));

答案 1 :(得分:1)

<强> 1。如果我注册log4net集成,我将如何访问ExtendedLogger:

使用依赖注入,您可以在需要的地方使用IExtendedLogger对象。

<强> 2。我想知道它是否无效,因为在设置全局变量之前已完成配置。

那是对的。您需要在设置属性后重新配置log4net。

以下是一个例子:

using Castle.Core.Logging;
using log4net.Config;

class MyClass {
    private readonly IExtendedLogger _extendedLogger;

    public MyClass(IExtendedLogger extendedLogger) {
        _extendedLogger = extendedLogger;
    }

    public void MyFunction() {
        _extendedlogger.GlobalProperties["logName"] = logName;
        XmlConfigurator.Configure();
        _extendedlogger.Error("my error message");
    }
}