NLog 配置规则不生效

标签 nlog elmah nlog-configuration

我的项目有以下 nlog.config 文件。当我在本地调试时,它按预期工作,Hangfire 消息被过滤为仅显示 Warn 及以上。然而,在我们的临时服务器 (IIS 8.5) 上,nlog 似乎忽略了该规则,只是将所有内容(包括 Info)记录到 elmah:

  <?xml version="1.0" encoding="utf-8" ?>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <extensions>
    <add assembly="NLog.Elmah"/>
  </extensions>
  <targets>
    <target xsi:type="Elmah" name="elmahWithLogLevelAsType" layout="${message}" LogLevelAsType="true"/>
  </targets>
  <rules>
    <logger name="Hangfire.*" minlevel="Warn" writeTo="elmahWithLogLevelAsType" final="true" />
    <logger name="*" minlevel="Info" writeTo="elmahWithLogLevelAsType" />
  </rules>
</nlog>

即使我删除了 Hangfire.* 规则并将 catchall 更改为 minlevel="Warn" 它仍然会记录 Info 项。

最佳答案

假设您正在运行两个不同版本的 NLog。

这将捕获所有带有警告(及以上级别)的日志事件:

<logger name="Hangfire.*" minlevel="Warn" writeTo="elmahWithLogLevelAsType" final="true" />

这意味着所有具有信息或以下信息的日志事件都将尝试下一条规则:

<logger name="*" minlevel="Info" writeTo="elmahWithLogLevelAsType" />

试试这个配置:

<?xml version="1.0" encoding="utf-8" ?>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <extensions>
    <add assembly="NLog.Elmah"/>
  </extensions>
  <targets>
    <target xsi:type="Elmah" name="elmahWithLogLevelAsType" layout="${message}" LogLevelAsType="true"/>
  </targets>
  <rules>
    <logger name="Hangfire.*" minlevel="Warn" writeTo="elmahWithLogLevelAsType" final="true" />
    <logger name="Hangfire.*" maxLevel="Warn" final="true" /> <!-- BlackHole -->
    <logger name="*" minlevel="Info" writeTo="elmahWithLogLevelAsType" />
  </rules>
</nlog>

关于NLog 配置规则不生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49039840/

相关文章:

c# - 具有洋葱架构的 Asp.Net Core 中的 NLog

c# - 索引格式每天更改为每周

asp.net - ELMAH 无法登录生产环境中的数据库,但无法登录测试服务器

elmah - 是否有我可以 Hook 的 Elmah WriteLog 事件

asp.net - NLogConfigurationException - 从 'System.String' 到 'System.Uri' 的无效转换

.net - 将 NLog 写入控制台

c# - 为什么记录器建议每个类(class)使用一个记录器?

c# - 为什么要为每个类创建 Nlog Logger

asp.net - 如何让 ELMAH 与 SQL Server 一起工作(权限问题)

c# - 当给定的事件属性不存在时,如何为文件目标指定默认路径?