Ajouter / Supprimer des fichiers journaux pendant l'exécution dans NLog

J'écris un petit utilitaire de conversion de fichiers. Les fichiers sont automatiquement convertis lorsqu'ils sont déposés dans un répertoire.

J'utilise NLog pour la journalisation. Outre un fichier journal central qui est configuré en utilisant NLog.conf (et qui reçoit tous les messages générés), je voudrais créer un fichier journal supplémentaire pour chaque fichier d'entrée, ayant un nom similaire et contenant tous les messages de journal écrits pendant le processus de conversion.

Malheureusement, je semble être incapable de le savoir comment ajouter correctement une nouvelle cible de fichier avec la règle appropriée pendant l'exécution. Je veux que tous les objets Logger écrivent dans le nouveau fichier journal pendant le processus de conversion.

J'ai essayé quelque chose comme

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();

Mais aucun fichier journal n'a été créé.

Qu'est-ce que j'ai fait de mal? Une idée?

25
demandé sur MartinStettner 2010-08-19 00:09:25

1 réponses

Le deuxième post sur ce fil m'a conduit à la solution: http://nlog-project.org/forum.html#nabble-td1685349

Vous devez obtenir la configuration NLog actuelle, apporter des modifications à cet objet LoggingConfiguration, puis l'attribuer à LogManager.Configuration.

C'est le code que j'ai utilisé:

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!");
52
répondu matthughes404 2010-08-30 19:31:00