gpt4 book ai didi

nlog - 有没有办法通过变量设置 NLog 记录器的最小级别?

转载 作者:行者123 更新时间:2023-12-05 01:43:56 25 4
gpt4 key购买 nike

使用 NLog v4.4.12,我的 App.config 中有这个

<nlog>
<include file="..\Common\Logs\Variables.xml" />
<rules>
<logger name="*" minlevel="${logLevel}" writeTo="LogFile, Wcf"/>
</rules>
</nlog>

这是我的 Variables.xml 文件内容

<?xml version="1.0" encoding="utf-8"?>
<nlog autoReload="true">
<variable name="logLevel" value="Fatal" />
</nlog>

但是我在启动我的应用程序时遇到异常

Unknown log level: ${logLevel}

我做错了什么还是根本不可能?

这样做的目标是最终让每个项目都有一个 xml 文件来记录事情,这样每个项目都可以有自己的最小级别,并且能够在运行时通过这个 xml 的版本来更改它。

编辑:在抛出异常之前添加此代码表明我的变量在那里具有所需的值。

var nl = NLog.LogManager.Configuration;
if (nl != null)
{
if (nl.Variables.ContainsKey("logLevel"))
{
Console.WriteLine(nl.Variables["logLevel"]);
}
}

最佳答案

** 更新的答案 **

NLog 版本。 4.6 添加了对在 minLevel 中使用 NLog-Config-Variables 的支持。参见 https://github.com/NLog/NLog/pull/2709

NLog 版本。 4.6.7 通过修改 NLog-Config-Variables 并调用 ReconfigExistingLoggers() 添加了对在运行时调整 minLevel 的支持.参见 https://github.com/NLog/NLog/pull/3184

** 原答案**

不幸的是,您不能在 ${...} 中使用布局渲染器(<logger>) minLevel、level 等属性

有两种选择:

使用过滤器

 <logger name="*"  writeTo="LogFile, Wcf">
<filters>
<when condition="(level &lt; ${logLevel})" action="Ignore"/>
</filters>
</logger>

缺点:

  • 可读性较差
  • 与 minLevel 属性相比,对性能的影响更大

更改代码中的规则

var rule = config.LoggingRules[0];
// disable old levels, enable new
rule.DisableLoggingForLevel(LogLevel.Debug);
rule.DisableLoggingForLevel(LogLevel.Trace);
rule.EnableLoggingForLevels(LogLevel.Info, LogLevel.Fatal);

//apply config
LogManager.Configuration = config;

关于nlog - 有没有办法通过变量设置 NLog 记录器的最小级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com