Aggiungere / rimuovere i file di log durante l'esecuzione in NLog
Domanda
Sto scrivendo una piccola utility di conversione di file. I file vengono convertiti automaticamente quando sono caduto in una directory.
Sto usando NLog per la registrazione. Oltre ad un file di log centrale che è configurato utilizzando NLog.conf (e che riceve tutti i messaggi generati), mi piacerebbe creare un file di registro aggiuntivo per ogni file di input, avere un nome simile e che contiene tutto messaggi scritti durante il processo di conversione log.
Purtroppo mi sembra di essere in grado di scoprire come aggiungere correttamente un nuovo insieme di destinazione del file con la regola appropriata durante il runtime. Voglio tutti gli oggetti Logger
di scrivere il nuovo file di registro durante il processo di conversione.
ho provato qualcosa di simile
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();
Ma nessun file di log è stato creato.
Cosa ho sbagliato? Qualche idea?
Soluzione
Il secondo post su questo thread mi ha portato alla soluzione: http://nlog-project.org/forum.html#nabble-td1685349
Si deve ottenere la configurazione NLog corrente, apportare modifiche a questo oggetto LoggingConfiguration, quindi assegnare di nuovo a LogManager.Configuration.
Questo è il codice che ho usato:
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!");