【问题标题】:Nlog filter when condition with equals not working当条件等于不起作用时的 Nlog 过滤器
【发布时间】:2023-01-13 04:17:30
【问题描述】:

我必须从我的启动类传递变量值

LogManager.Configuration.Variables["environment"] = "Development";

我在我的 nlog.config 文件中添加了以下过滤器

<rules>
    <logger name="*" minlevel="Error" writeTo="logfile">
        <filters>
            <when condition="equals('${var:environment}', 'Development')" action="Ignore" />                
        </filters>
    </logger>
</rules>

即使我将值作为 Development 传递,消息仍会被记录而不是被忽略。

但是,当我对它的工作价值进行硬编码时

【问题讨论】:

标签: asp.net-core nlog


【解决方案1】:

你找到了一个bug in NLog,但如果你这样做它应该可以工作(也会更快):

<rules>
    <logger name="*" minlevel="Error" writeTo="logfile">
        <filters defaultAction='log'>
            <when condition="'${var:environment}' == 'Development'" action="Ignore" />                
        </filters>
    </logger>
</rules>

请注意,您还可以在 minLevel 中使用 Layout。前任。 minLevel="${var:EnvironmentMinLevel:whenEmpty=Error}",比&lt;filters&gt;快多了。

NLog.LogManager.Configuration.Variables["EnvironmentMinLevel"] = "Off";
NLog.LogManager.ReconfigExistingLoggers();

另见https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules

另见:https://github.com/NLog/NLog/wiki/Environment-specific-NLog-Logging-Configuration

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多