【问题标题】:In NLog, is it possible to use layouts to define the log level?在 NLog 中,是否可以使用布局来定义日志级别?
【发布时间】:2016-08-23 11:03:02
【问题描述】:

我想在 NLog 中使用 Layouts 以便能够使用外部变量更改最低日志级别:

<nlog>
   <variable name="loglevel" value="Debug"/>
   <targets>
      <target ... /> 
   </targets>
   <rules>
      <logger name="*" minlevel="${loglevel}" writeTo="LogFile" />
   </rules>
</nlog>

在启动 NLog 后,所有日志级别(例如:Tracing、Debug、Info、...)都设置为 false,这表明 NLog 无法正确解析 minlevel 属性。

NLog 布局功能似乎只适用于target 属性。 我想要实现的目标:在我的真实应用中,loglevel 不是一个常量,而是一个自定义的layout renderer

我也尝试将value="Debug" 替换为value="LogLevel.Debug",但没有成功。

【问题讨论】:

标签: c# logging nlog


【解决方案1】:

** 更新答案**

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

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

** 原始答案**

&lt;logger&gt; 上的 minlevelmaxlevellevel 属性应该是固定字符串。

在这种情况下,您可以使用&lt;filter&gt;,例如

<nlog>
   <variable name="loglevel" value="Debug"/>
   <targets>
      <target ... /> 
   </targets>
   <rules>
      <logger name="*" writeTo="LogFile" >
          <filter condition="${level} >= ${loglevel}" action="Log">
      </logger>
   </rules>
</nlog>

docs

【讨论】:

  • 过滤条件有效,但前提是定义为常量,例如:level &gt;= LogLevel.Debug。我无法让它作为一个变量工作:level &gt;= ${loglevel}。此外,使用的语法似乎与您的语法略有不同,请参见此处:github.com/NLog/NLog/wiki/Conditions
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多