C # Log4Net - динамически изменять каталог журналов программно - PullRequest
5 голосов
/ 08 июля 2010

Я прочитал большинство смежных тем, касающихся программного изменения каталога журналов, но ответы были немного сложными.

Моя проблема заключается в попытке динамически изменить место сохранения моего файла журнала из приложения C #. У меня есть текстовое поле с кнопкой обзора, чтобы выбрать, где оно должно быть сохранено.

Кто-нибудь имеет идею или может указать мне правильное направление с каким-то кодом? Я пытался поиграть с подобными идеями, но не могу понять, что это правильно.

Ответы [ 2 ]

12 голосов
/ 19 июля 2013

Если вы хотите, чтобы ваш файл журнала располагался в указанном месте, которое будет определено во время выполнения, может быть выходным каталогом вашего проекта, тогда вы можете настроить запись в файле .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().

0 голосов
/ 26 июня 2018

Хотя заданный вопрос довольно старый, но мне удалось найти действительно хорошее решение здесь , которое мне помогло.

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
}
...