Agregar, habilitar y deshabilitar registradores NLog mediante programación

Agregar, habilitar y deshabilitar registradores NLog mediante programación

Para agregar:

var logTarget = new ...
logTarget.Layout = "Your layout format here";
// e.g. "${logger}: ${message} ${exception:format=tostring}";

// specify what gets logged to the above target
var loggingRule = new LoggingRule("*", LogLevel.Debug, logTarget);

// add target and rule to configuration
LogManager.Configuration.AddTarget("targetName", logTarget);
LogManager.Configuration.LoggingRules.Add(loggingRule);
LogManager.Configuration.Reload();

La eliminación se realiza con

LogManager.Configuration.LoggingRules.Remove(loggingRule);
LogManager.Configuration.Reload();

Sé que esta es una respuesta antigua, pero quería enviar comentarios a cualquiera que busque realizar modificaciones en sus objetivos y reglas de registro mediante programación que Configuration.Reload() no funciona.

Para actualizar los objetivos existentes mediante programación, debe utilizar el método ReconfigExistingLoggers:

var target = (FileTarget)LogManager.Configuration.FindTargetByName("logfile");
target.FileName = "${logDirectory}/file2.txt";
LogManager.ReconfigExistingLoggers();

Un ejemplo que agrega y elimina reglas de registro sobre la marcha:

if (VerboseLogging && !LogManager.Configuration.LoggingRules.Contains(VerboseLoggingRule))
{
    LogManager.Configuration.LoggingRules.Add(VerboseLoggingRule);
    LogManager.ReconfigExistingLoggers();
}
else if (!VerboseLogging && LogManager.Configuration.LoggingRules.Contains(VerboseLoggingRule))
{
    LogManager.Configuration.LoggingRules.Remove(VerboseLoggingRule);
    LogManager.ReconfigExistingLoggers();
}

Como está escrito en los documentos:

Esta respuesta y muestra proviene de la respuesta de Tony en:

Actualizar el nombre de archivo de destino de NLog en tiempo de ejecución


NLog 4.6.7 permite asignar variables de diseño a niveles de LoggingRule y cambiar estas variables de diseño en tiempo de ejecución.

<nlog>
    <variable name="myLevel" value="Warn" />
    <rules>
      <logger minLevel="${var:myLevel}" />
    </rules>
</nlog>

Entonces puedes hacer esto en código:

LogManager.Configuration.Variables["myLevel"] = "Debug";
LogManager.ReconfigExistingLoggers();

Consulte también:https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules