尝试使用环境变量覆盖 Nlog 配置中的 LogLevel,但它不起作用:例如
<logger name="*" writeTo="console">
<filters>
<when condition="level >= '${environment:LOG_LEVEL}' " action="Ignore"/>
</filters>
</logger>
Run Code Online (Sandbox Code Playgroud)
其中 LOG_LEVEL 设置为 LogLevel.Info
与 Nlog Env var 相同的配置有效:
<variable name="myvar1" value="LogLevel.Info"/>
<logger name="*" writeTo="console">
<filters>
<when condition="level >= '${myvar1}' " action="Ignore"/>
</filters>
</logger>
Run Code Online (Sandbox Code Playgroud)
有关如何使用环境变量的任何提示吗?要写一些扩展吗?
Rol*_*sen 10
更新 NLog 版本 4.6.7
NLog 4.6.7 使得在 LoggingRules 中使用 Layout 变得更加容易:
<logger minLevel="${environment:LOG_LEVEL}" />
Run Code Online (Sandbox Code Playgroud)
但仍然需要显式调用来LogManager.ReconfigExistingLoggers()激活。因此,可能有一个后台线程来监视环境变量的变化,从而触发显式调用。
另请参阅:https://github.com/nlog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules
另请参阅:https ://github.com/NLog/NLog/wiki/Environment-specific-NLog-Logging-Configuration
原始版本(较旧的 NLog)
我知道这有点啰嗦,但也许它会起作用,直到有人创建适当的修复程序:
<logger name="*" writeTo="console">
<filters>
<when condition="(level >= LogLevel.Fatal and equals('${environment:LOG_LEVEL}','LogLevel.Fatal')" action="Log"/>
<when condition="(level >= LogLevel.Error and equals('${environment:LOG_LEVEL}','LogLevel.Error')" action="Log"/>
<when condition="(level >= LogLevel.Info and equals('${environment:LOG_LEVEL}','LogLevel.Info')" action="Log"/>
<when condition="(level >= LogLevel.Debug and equals('${environment:LOG_LEVEL}','LogLevel.Debug')" action="Log"/>
<when condition="(level >= LogLevel.Trace and equals('${environment:LOG_LEVEL}','LogLevel.Trace')" action="Log"/>
</filters>
</logger>
Run Code Online (Sandbox Code Playgroud)
顺便提一句。好奇为什么你原来的问题将其设置为小于而不是大于。预计当将 LOG_LEVEL 配置为警告时,它应该记录所有警告或更糟的警告。
上面的示例会对性能造成影响,因为环境变量的查找速度并不快。NLog 4.6.8 引入了 cachedSeconds 功能,可以减少性能损失:
<logger name="*" writeTo="console">
<filters>
<when condition="(level >= LogLevel.Fatal and equals('${environment:LOG_LEVEL:cachedSeconds=5}','LogLevel.Fatal')" action="Log"/>
<when condition="(level >= LogLevel.Error and equals('${environment:LOG_LEVEL:cachedSeconds=5}','LogLevel.Error')" action="Log"/>
<when condition="(level >= LogLevel.Info and equals('${environment:LOG_LEVEL:cachedSeconds=5}','LogLevel.Info')" action="Log"/>
<when condition="(level >= LogLevel.Debug and equals('${environment:LOG_LEVEL:cachedSeconds=5}','LogLevel.Debug')" action="Log"/>
<when condition="(level >= LogLevel.Trace and equals('${environment:LOG_LEVEL:cachedSeconds=5}','LogLevel.Trace')" action="Log"/>
</filters>
</logger>
Run Code Online (Sandbox Code Playgroud)