You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLog配置:如何仅在LogLevel≥Error时包含带JsonLayout的attribute

解决NLog按日志级别控制属性显示的问题

你之前的写法问题出在:把when表达式放在了attribute的Layout属性里,但嵌套JsonLayout时,这种写法只会影响属性的内容,没办法控制整个属性是否生成,所以条件判断相当于被忽略了。

给你两种正确的实现方式,按需选择:

方式一:直接控制属性是否生成(推荐)

利用JsonLayout中<attribute>标签自带的condition属性,直接判断日志级别,满足条件才会生成整个error属性:

<attribute name="error" encode="false" condition="level >= LogLevel.Error">
    <layout type="JsonLayout">
        <attribute name="message" layout="${message}" />
    </layout>
</attribute>

这种方式下,当日志级别低于Error时,整个error属性不会出现在输出的JSON里;级别≥Error时才会生成包含message的嵌套JSON结构。

方式二:控制属性内容(保留属性但空值)

如果需要保留error属性,但条件不满足时显示空值,可以用WhenLayout包裹JsonLayout:

<attribute name="error" encode="false">
    <layout type="WhenLayout" condition="level >= LogLevel.Error">
        <layout type="JsonLayout">
            <attribute name="message" layout="${message}" />
        </layout>
    </layout>
</attribute>

这种写法下,error属性始终存在,但只有级别达标时才会填充嵌套的JSON内容,否则值为空。

内容的提问来源于stack exchange,提问作者liorhen9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:57:43