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

如何在运行时使用ExtendedLog4netLogger.cs为appender设置日志文件路径?,log4net,castle-windsor,castle,Log4net,Castle Windsor,Castle,我正在想办法如何使用 要在运行时或使用LoggingFacility动态更改日志文件路径 这应该类似于直接使用log4net,如下所示: log4net.GlobalContext.Properties["LogName"] = logName; log4net.GlobalContext.Properties[“LogName”]=LogName; 如果我像这样注册log4net集成,我将如何访问ExtendedLogger: container.AddFacility<LoggingF

我正在想办法如何使用 要在运行时或使用LoggingFacility动态更改日志文件路径

这应该类似于直接使用log4net,如下所示:

log4net.GlobalContext.Properties["LogName"] = logName; log4net.GlobalContext.Properties[“LogName”]=LogName; 如果我像这样注册log4net集成,我将如何访问ExtendedLogger:

container.AddFacility<LoggingFacility>(f => f.UseLog4Net()); container.AddFacility(f=>f.UseLog4Net()); 更新:我使用以下代码注册扩展记录器

container.AddFacility<LoggingFacility>(LoggerImplementation.ExtendedLog4net).WithConfig(configFile).ToLog(Lo‌gger)); 
container.AddFacility(LoggerImplementation.ExtendedLog4net).WithConfig(configFile).ToLog(Lo‌(g),
我没有得到任何运行时异常,并且记录器不是空实例,但我根本看不到使用全局属性创建的日志文件,我还为appender将配置值设置为:

<file type="log4net.Util.PatternString" value="%property{LogName}" /> 如果我只是将配置文件中的file属性设置为full path,它就可以工作了。我想知道它是否不工作,因为配置是在设置全局变量之前完成的

extendedlogger.GlobalProperties["logName"] = logName;
要启用扩展记录器,您需要执行以下操作:

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

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");
    }
}

感谢Krzysztof,我更新了我的问题,因为我不确定如何使用我在Windsor文档中使用的log4net集成注册来访问这个类。这给我带来了其他问题,如何在注册时传递配置文件路径和使用命名的记录器。我现在这样做:container.AddFacility(f=>f.UseLog4Net(configPath.ToLog(namedLogger));我将尝试一下,看看它是否有效:container.AddFacility(f=>f.LogUsing(LoggerImplementation.ExtendedLog4net).WithConfig(configPath.ToLog(namedLogger));尽管我仍然不知道如何访问extendedLogger来做到这一点:extendedLogger.GlobalProperties[“logName”]=logName;是的,我迷路了,我不知道如何解析扩展记录器以添加全局属性。