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?

È stato utile?

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!");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top