【问题标题】:Configuring log4net appenders via XML file *and* code通过 XML 文件 * 和 * 代码配置 log4net 附加程序
【发布时间】:2010-05-11 00:26:08
【问题描述】:

我今天开始玩 log4net,到目前为止,我真的很喜欢它。为了保留我们当前的日志记录功能,应用程序需要在应用程序启动时创建一个新的日志文件。日志文件名中包含编码的日期和时间戳。目前,我已经通过XmlConfigurator 配置了 log4net,效果很好,只是我的RollingFileAppender 的文件名是硬编码在配置 XML 文件中的。

我想继续使用XmlConfigurator,但在调用Configure() 之后,我想访问RollingFileAppender,并在代码中将其文件值更改为动态生成的字符串。示例documentation online 现在似乎已经关闭,但我已经浏览了 SDK 参考,看起来我可以使用HeirarchyGetAppenders() 来做我需要做的事情。我在正确的轨道上吗?

好的,我尝试了一下,尝试了以下代码,但没有成功:

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
    // get the appenders
    IAppender[] appenders = hierarchy.GetAppenders();
    // change the filename for the RollingFileAppender
    foreach( IAppender a in appenders) {
        RollingFileAppender rfa = a as RollingFileAppender;
        if(rfa == null)
            continue;
        rfa.File = "newfile.log"; // no runtime error, but doesn't work.
    }
}
_log.Info("Application started");

【问题讨论】:

    标签: log4net appender rollingfileappender log4net-configuration


    【解决方案1】:

    试试这个 sn-p:

    XmlConfigurator.Configure();
    
    log4net.Repository.ILoggerRepository repo = LogManager.GetRepository();
    foreach (log4net.Appender.IAppender appender in repo.GetAppenders())
    {
    if (appender.Name.CompareTo("RollingFileAppender") == 0 && appender is log4net.Appender.RollingFileAppender)
    {
       var appndr = appender as log4net.Appender.RollingFileAppender;
       string logPath = "MyApplication.log";
       appndr.File = logPath;
       appndr.ActivateOptions();
    }
    

    我曾发过类似的文章here

    【讨论】:

    • +1 以获得更好的实现,但您对 Configure 的调用需要指定用于配置的 XML 文件。
    • @Dave:不,不会,调用Configure() 将使用相关项目的app.configweb.config
    【解决方案2】:

    在这种情况下,您是否需要滚动文件附加程序?如果不是,我希望如果您使用普通文件附加程序,您的代码会创建所需的结果。

    编辑:如果您在 appender 上调用 ActivateOptions(),它可能与 RollingFile Appender 一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多