无法读取带有点的appsettings.json键

问题描述 投票:0回答:1

我正在尝试将 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
c# json xml nlog
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.