LogManager.Configuration.FindRuleByName return 空。日志

LogManager.Configuration.FindRuleByName return null. NLog

我有规则

<targets >
    <target name="Global" xsi:type="File" fileName="Logs/GlobalLog.txt"  archiveNumbering="Date" enableArchiveFileCompression="true" archiveFileName="Archive/IPSlog.{#}.zip" archiveDateFormat="yyyy-MM-dd" 
     maxArchiveDays="${logLifetime}"
    archiveEvery="Day" />
  </targets>
 <rules>
    <logger name="Global" minlevel="Trace"  writeTo="Global,Color" />
  </rules>

我尝试通过代码更改规则

 LogManager.Configuration.FindRuleByName("Global").EnableLoggingForLevels(loglevel, LogLevel.Fatal);

但 FindRuleByName return 为空。我的错误在哪里? 目标查找器工作正常

    var target = (FileTarget)LogManager.Configuration.FindTargetByName("Global");

这条规则:

<logger name="Global" minlevel="Trace"  writeTo="Global,Color" />

指定以下条件:

  • Logger 必须命名为“Global”。前任。 NLog.LogManager.GetLogger("Global")
  • LogLevel 必须是 Trace(或更多服务器)
  • 写入名为 "Global""Color" 的目标。

我猜你想要的是这个:

<logger name="*" minlevel="Trace"  writeTo="Global,Color" ruleName="Global" />
  • Logger 可以是任何名称,因为 *-wildcard。前任。 NLog.LogManager.GetCurrentClassLogger().
  • LogLevel 必须是 Trace(或更多服务器)
  • 写入名为 "Global""Color" 的目标。
  • 分配 Logging-Rule-Name,因此可以使用 FindRuleByName.
  • 进行查找

请注意,您还可以使用 NLog Config-variables or NLog Global-Diagnostic-Context 动态更新级别过滤器。也可以看看: https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules