.net - implement - reconfigurando NLog programáticamente
nlog file target (2)
Encontré "API de configuración" en la documentación de NLog ( https://github.com/nlog/NLog/wiki/Configuration-API ), puede ser de ayuda. Mire el espacio de nombres NLog.Config en el ensamblado NLog también.
Esta es la primera vez que uso el paquete NLog para el registro, pero hasta ahora ha sido genial trabajar con él.
En mi escenario, necesito inicializar mi configuración de configuración de registro de NLog mediante programación en lugar de a través del escenario de archivo de configuración más típico. He probado esto y lo tengo todo funcionando como lo quiero por defecto. Pero, ¿cómo puedo modificar la configuración mediante programación en tiempo de ejecución? Probablemente, el escenario más común aquí es uno donde el nivel de registro de la aplicación se establece en ERROR de manera predeterminada, pero surge un error en un módulo en particular que quiero cambiar el nivel de registro para que sea mucho más detallado para rastrear el error. Me gustaría escribir una pequeña interfaz web para poder modificar fácilmente estas configuraciones en tiempo de ejecución, pero quiero asegurarme de que estoy tomando el enfoque correcto con esto.
Sé que tengo un año de retraso, pero me encontré con un escenario similar en el que necesitaba proporcionar un control dinámico del registrador a los usuarios. Afortunadamente, esto es relativamente fácil con nlog. Aquí solo habilito el registro de nivel de rastreo en un registrador ya creado, pero obviamente podría hacer lo que quisiera, incluyendo agregar nuevos objetivos / reglas o simplemente reemplazar completamente la configuración del registrador con la generada mediante programación.
Basic ColoredConsole nlog.config:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<targets>
<target xsi:type="ColoredConsole" name="c"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Error" writeTo="c" />
</rules>
</nlog>
Aplicación de consola simple:
public class Program
{
//Initialize default Logger from config file
private static readonly Logger m_log = LogManager.GetCurrentClassLogger();
public static Logger Log
{
get { return m_log; }
}
public static void Main(string[] args)
{
Log.Trace("You won''t see me because config is at LogLevel.Error");
EnabledTraceForAllRules();
Log.Trace("You will see me now though!");
//Pause console window
Console.WriteLine("Press any key to continue...");
Console.ReadKey(true);
/* Prints:
2013-05-07 16:04:22.7050 TRACE You will see me now though!
Press any key to continue...
*/
}
public static void EnabledTraceForAllRules()
{
foreach(var rule in LogManager.Configuration.LoggingRules)
{
rule.EnableLoggingForLevel(LogLevel.Trace);
}
//Call to update existing Loggers created with GetLogger() or
//GetCurrentClassLogger()
LogManager.ReconfigExistingLoggers();
}
}
Si necesita modificar la configuración de registro desde fuera del proceso y tiene que hacerse mediante programación, le sugeriría ir con WCF. Podría exponer un pequeño servicio WCF desde su aplicación o sitio web que proporcione métodos para reconfigurar nlog.