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
相关产品推荐
相关产品推荐

