Agregar / eliminar archivos de registro durante el tiempo de ejecución en NLog


Estoy escribiendo una pequeña utilidad de conversión de archivos. Los archivos se convierten automáticamente cuando se dejan caer en un directorio.

Estoy usando NLog para el registro. Además de un archivo de registro central que se configura mediante NLog.conf (y que recibe todos los mensajes generados), me gustaría crear un archivo de registro adicional para cada archivo de entrada, con un nombre similar y que contenga todos los mensajes de registro escritos durante el proceso de conversión.

Desafortunadamente parece que no puedo averiguarlo cómo agregar correctamente un nuevo destino de archivo junto con la regla apropiada durante el tiempo de ejecución. Quiero que todos los objetos Logger escriban en el nuevo archivo de registro durante el proceso de conversión.

Probé algo como

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

Pero no se creó ningún archivo de registro.

¿Qué hice mal? Alguna idea?

Author: MartinStettner, 2010-08-19

1 answers

El segundo post en este hilo me llevó a la solución: http://nlog-project.org/forum.html#nabble-td1685349

Debe obtener la configuración actual de NLog, realizar cambios en este objeto LoggingConfiguration y luego asignarlo de nuevo a LogManager.Configuración.

Este es el código que usé:

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
Author: matthughes404,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-30 19:31:00