首页 > 解决方案 > LogManager.Configuration.FindRuleByName 返回 null。日志

问题描述

我有规矩

<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 返回 null。我的错误在哪里?目标查找器工作正常

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

标签: c#.netxmlnlog

解决方案


这条规则:

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

指定以下条件:

  • 记录器必须命名为“全局”。前任。NLog.LogManager.GetLogger("Global")
  • LogLevel 必须是 Trace(或更多 servere)
  • 写入名为"Global"和的目标"Color"

我想你想要的是这样的:

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

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


推荐阅读