Подтвердить что ты не робот

Добавить/удалить лог файлы во время выполнения в 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();

Но файл журнала не был создан.

Что я не так понял? Любая идея?

4b9b3361

Ответ 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!");