如何从NLog的代码中添加,编辑,删除,启用和禁用记录器?
答案 0 :(得分:29)
添加:
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();
使用
删除LogManager.Configuration.LoggingRules.Remove(loggingRule);
LogManager.Configuration.Reload();
答案 1 :(得分:7)
我知道这是一个陈旧的答案,但我想为任何想要修改目标并以编程方式记录规则的人提供反馈,即Configuration.Reload()不起作用。
要以编程方式更新现有目标,您需要使用ReconfigExistingLoggers方法:
var target = (FileTarget)LogManager.Configuration.FindTargetByName("logfile");
target.FileName = "${logDirectory}/file2.txt";
LogManager.ReconfigExistingLoggers();
动态添加和删除日志记录规则的示例:
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();
}
如文档中所述:
循环播放GetLogger先前返回的所有记录器。和 重新计算其目标和筛选器列表。修改后有用 以编程方式配置以确保所有记录器都已存在 正确配置。
这个答案和样本来自Tony的答案:
答案 2 :(得分:1)
NLog 4.6.7使得可以将布局变量分配给LoggingRule级别,并在运行时更改这些布局变量。
<nlog>
<variable name="myLevel" value="Warn" />
<rules>
<logger minLevel="${var:myLevel}" />
</rules>
</nlog>
然后您可以通过代码执行此操作:
LogManager.Configuration.Variables["myLevel"] = "Debug";
LogManager.ReconfigExistingLoggers();
另请参阅:https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules