我正在尝试将 appsettings.json 属性访问到 NLog.Config 文件中。我正在 nlog 中编写规则,并使用 configsetting 布局渲染器从 appsettings 访问日志级别。 使用下面的代码,它可以与正常属性(Microsoft)正常工作
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft}" writeTo="logfile,Loggly" />
对于名称中带有点的属性(Microsoft.Hosting.Lifetime),我无法读取该值
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft.Hosting.Lifetime}" writeTo="logfile,Loggly" />
Json 示例如下:
"Logging": {
"LogLevel": {
"Default": "Error",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Error"
}
我在下面尝试过,但到目前为止没有任何效果
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel'.Microsoft.Hosting.Lifetime'}" writeTo="logfile,Loggly" />
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.'Microsoft.Hosting.Lifetime'}" writeTo="logfile,Loggly" />
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft\.Hosting\.Lifetime}" writeTo="logfile,Loggly" />
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft/.Hosting/.Lifetime}" writeTo="logfile,Loggly" />
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel'.[Microsoft.Hosting.Lifetime]'}" writeTo="logfile,Loggly" />
编辑1: 尝试了 Rolf Kristensen 的解决方案,它在一定程度上解决了一个小问题。 日志按照日志级别设置工作,只有一个小问题。
我的 nlog.config 文件设置
<logger name="Microsoft.Hosting.Lifetime*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft\\.Hosting\\.Lifetime}" writeTo="logfile,Loggly" />
<logger name="Microsoft.Hosting.Lifetime*" maxlevel="${configsetting:item=Logging.LogLevel.Microsoft\\.Hosting\\.Lifetime}" writeTo="void" final="true" />
<logger name="Microsoft*" minlevel="${configsetting:item=Logging.LogLevel.Microsoft}" writeTo="logfile,Loggly" />
<logger name="Microsoft*" maxlevel="${configsetting:item=Logging.LogLevel.Microsoft}" writeTo="void" final="true"/>
<logger name="*" minlevel="${configsetting:item=Logging.LogLevel.Default}" writeTo="logfile,Loggly" />
appsettings.json 设置
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Error",
"Microsoft.Hosting.Lifetime": "Information"
}
期望对于
Microsoft.Hosting.Lifetime
规则,它应该将日志推送到无效,包括信息级别。但它推到错误级别才无效。我认为它正在选择为 Microsoft
设置的日志级别。
从nlog内部日志中获取的日志:
2022-08-25 13:09:30.7512 Warn Logger: Microsoft.Hosting.Lifetime configured with duplicate output to target: FileTarget(Name=logfile). LoggingRule with NamePattern='Microsoft*' and Level=Error has been skipped.
2022-08-25 13:09:30.7512 Warn Logger: Microsoft.Hosting.Lifetime configured with duplicate output to target: FileTarget(Name=logfile). LoggingRule with NamePattern='*' and Level=Fatal has been skipped.
2022-08-25 13:09:30.7512 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Hosting.Lifetime
2022-08-25 13:09:30.7512 Debug Logger Microsoft.Hosting.Lifetime [Trace] => void
2022-08-25 13:09:30.7678 Debug Logger Microsoft.Hosting.Lifetime [Debug] => void
2022-08-25 13:09:30.7678 Debug Logger Microsoft.Hosting.Lifetime [Info] => logfile Loggly void
2022-08-25 13:09:30.7678 Debug Logger Microsoft.Hosting.Lifetime [Warn] => logfile Loggly void
2022-08-25 13:09:30.7678 Debug Logger Microsoft.Hosting.Lifetime [Error] => logfile Loggly void
2022-08-25 13:09:30.7678 Debug Logger Microsoft.Hosting.Lifetime [Fatal] => logfile Loggly
NLog.Extensions.Logging v5.0.2 已发布。您可以在哪里执行此操作:
${configsetting:item=Logging.LogLevel.Microsoft\\.Hosting\\.Lifetime}
或者你可以这样做:
${configsetting:item=Logging.LogLevel.Microsoft..Hosting..Lifetime}
另请参阅:https://www.nuget.org/packages/NLog.Extensions.Logging/5.0.2