我有以下我的项目的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.*
规则并将CATCTALL更改为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>