当前位置:  开发笔记 > 编程语言 > 正文

动态设置appender文件路径的最佳方法

如何解决《动态设置appender文件路径的最佳方法》经验,为你挑选了3个好方法。

我试图找到比我聪明的人来验证我写的一些语法.我的想法是将RollingFileAppender的文件名配置为程序集的名称,以使其更适用于我的项目.

我已经看过这篇以前的SO文章,但它并不完全能够回答我的问题......

我有一段时间试图理解Log4net的内部组件,这就是我提出的(驻留在Global.asax文件中 - Application_Start方法):

// Bind to the root hierarchy of log4net
log4net.Repository.Hierarchy.Hierarchy root = 
  log4net.LogManager.GetRepository() 
    as log4net.Repository.Hierarchy.Hierarchy;

if (root != null)
{
  // Bind to the RollingFileAppender
  log4net.Appender.RollingFileAppender rfa = 
    (log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender");

  if (rfa != null)
  {
    // Set the file name based on the assembly name
    string filePath = 
      string.Format("~/App_Data/{0}.log", GetType().Assembly.GetName().Name);

    // Assign the value to the appender
    rfa.File = Server.MapPath(filePath);

    // Apply changes to the appender
    rfa.ActivateOptions();
  }
}

任何人都可以告诉我,"这很可怕",或者"这应该可以正常工作"?另外,如果我动态设置文件,我仍然可以期望log4net行为根据log4net.config文件设置旋转文件吗?

非常感激!



1> Eddie..:

你正在努力做到这一点!在应用程序的配置文件中将log4net配置定义为XML并使用%property{}以获得优势:


  
  ....

这是动态的 - 您只需初始化log4net 之前设置log4net属性" LogName" .因此,在配置log4net之前的任何时候,在代码中,设置此属性的所需值:

string LogName = GetType().Assembly.GetName().Name + ".log";
log4net.GlobalContext.Properties["LogName"] = LogName;

当然,您可以使用任何属性名称.我选择了"LogName"作为一个简单的例子,但是如果你想要的话,每个应用程序都可以有一个,只要你的代码知道正确的属性名称是什么以及正确的值应该是什么.


值得一提的是,type ="log4net.Util.PatternString"行非常重要.我花了两个小时搜索为什么我在Debug文件夹中得到"%property {FileName}"文件而不是Log文件夹中的"events.txt".
对我来说,这只能通过调用`log4net.Config.XmlConfigurator.ConfigureAndWatch("log4net.config.xml")来重新加载配置.
啊,这就是为什么我发布这个...它似乎比应该更难.谢谢...
你知道在使用log4netfactoryadapter时是否有相同的方法或方法吗?我在所有代码中使用common.logging并声明性地定义配置(app.config).我已经尝试过GlobalContext方法,但最终在我的文件名中使用了(null),我知道我使用的变量不是null.

2> Sebastian Hä..:

在2015年,我们这样做:


  

无需其他代码.

App域是执行程序集的文件名.



3> 小智..:

以下是在运行时设置或更改第一个appender的日志文件的方法:

var appender = (log4net.Appender.FileAppender)LogManager.GetRepository().GetAppenders()[0];
appender.File = "C:\whatever.log";
appender.ActivateOptions();

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有