Я начал играть с log4net сегодня, и пока мне очень нравится. Чтобы сохранить текущие функциональные возможности ведения журнала, приложение должно создавать новый файл журнала при каждом запуске приложения. Имя файла журнала содержит дату и время, закодированные в нем. В настоящее время я настроил log4net через XmlConfigurator
, что прекрасно работает, за исключением того, что имя файла для моего RollingFileAppender
жестко закодировано в XML-файле конфигурации.
Я бы хотел продолжить использовать XmlConfigurator
, но после вызова Configure()
я хочу получить значение RollingFileAppender
и в коде изменить его значение файла на динамически генерируемую строку. Пример документации онлайн , похоже, сейчас недоступен, но я просмотрел ссылку на SDK, и похоже, что я могу использовать Heirarchy
и GetAppenders()
, чтобы сделать то, что мне нужно. Я на правильном пути?
Хорошо, я попробовал и попробовал следующий код, который не работал:
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");