Добавить/удалить лог файлы во время выполнения в NLog
Я пишу небольшую утилиту для преобразования файлов. Файлы автоматически преобразуются при их удалении в каталог.
Я использую NLog для ведения журнала. Помимо центрального файла журнала, который настроен с использованием NLog.conf(и который получает все созданные сообщения), я хотел бы создать один дополнительный файл журнала для каждого входного файла с похожим именем и содержать все сообщения журнала, записанные во время процесса преобразования.
К сожалению, я, похоже, не смог выяснить, как правильно добавить новую цель файла вместе с соответствующим правилом во время выполнения. Я хочу, чтобы все объекты Logger
записывались в новый файл журнала во время процесса преобразования.
Я пробовал что-то вроде
var logfile = new NLog.Targets.FileTarget();
logfile.FileName = fileName + ".log";
logfile.KeepFileOpen = true;
logfile.Initialize();
var rule = new NLog.Config.LoggingRule("*", logfile);
NLog.LogManager.Configuration.LoggingRules.Add(rule);
NLog.LogManager.ReconfigExistingLoggers();
//
// Proceed with converting file
//
logfile.Flush();
NLog.LogManager.Configuration.LoggingRules.Remove(rule);
NLog.LogManager.ReconfigExistingLoggers();
Но файл журнала не был создан.
Что я не так понял? Любая идея?
Ответы
Ответ 1
Второе сообщение в этой теме привело меня к решению:
http://nlog-project.org/forum.html#nabble-td1685349
Вам нужно получить текущую конфигурацию NLog, внести изменения в этот объект LoggingConfiguration, а затем назначить его обратно в LogManager.Configuration.
Это код, который я использовал:
LoggingConfiguration config = LogManager.Configuration;
var logFile = new FileTarget();
config.AddTarget("file", logFile);
logFile.FileName = fileName + ".log";
logFile.Layout = "${date} | ${message}";
var rule = new LoggingRule("*", LogLevel.Info, logFile);
config.LoggingRules.Add(rule);
LogManager.Configuration = config;
logger.Info("File converted!");