1

我想弄清楚如何使用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)); 

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

<file type="log4net.Util.PatternString" value="%property{LogName}" />

如果我只是将配置文件中的文件属性设置为完整路径,它确实可以工作。我想知道它是否不起作用,因为配置是在设置全局变量之前完成的。

4

2 回答 2

2
extendedlogger.GlobalProperties["logName"] = logName;

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

container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.ExtendedLog4net));
于 2013-05-02T23:01:23.363 回答
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");
    }
}
于 2017-03-06T11:28:08.313 回答