C#Log4Net - 以编程方式动态更改日志目录

时间:2010-07-08 14:32:29

标签: c# logging configuration directory log4net

我通读了大多数有关以编程方式更改日志目录的相关主题,但答案有点先进。

我的问题是尝试动态更改从C#应用程序保存日志文件的位置。我有一个带有浏览按钮的文本框,可以选择保存的位置。

任何人都有想法或者可以用一些代码指出我正确的方向?我尝试过类似的想法,但似乎无法做到正确。

2 个答案:

答案 0 :(得分:12)

如果您希望将日志文件放在指定位置,该位置将在运行时决定,可能是您的项目输出目录,那么您可以以这种方式配置.config文件条目

file type="log4net.Util.PatternString" value="%property{LogFileName}.txt"

然后在调用log4net configure之前的代码中,设置如下所示的新路径

log4net.GlobalContext.Properties["LogFileName"] = @"E:\file1"; //log file path 
log4net.Config.XmlConfigurator.Configure();

因此,如果您的要求是如此频繁地更改日志目录,那么每次更新属性值后跟.Configure()

答案 1 :(得分:0)

尽管提出的问题已经很老了,但是我碰巧找到了一个非常不错的解决方案here,对我有用。

public static bool ChangeLogFileName(string appenderName, string newFilename)
{            
  var rootRepository = log4net.LogManager.GetRepository();
  foreach (var appender in rootRepository.GetAppenders())
  {
    if (appender.Name.Equals(appenderName) && appender is log4net.Appender.FileAppender)
    {
      var fileAppender = appender as log4net.Appender.FileAppender;
      fileAppender.File = newFilename;
      fileAppender.ActivateOptions();
      return true;  // Appender found and name changed to NewFilename
    }
  }
  return false; // appender not found
}