Добавить / удалить файлы журналов во время выполнения в NLog - PullRequest
25 голосов
/ 19 августа 2010

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

Я использую 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 Ответ

53 голосов
/ 30 августа 2010

Второй пост в этой теме привел меня к решению: 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!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...