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

NLog配置无法读取布尔属性,如何实现配置内布尔值校验?

如何在NLog配置中直接进行布尔值检查?

当然可以直接在NLog配置里做布尔值属性的检查,不需要转成字符串对比!你之前的问题出在条件表达式没有明确指定属性的类型解析规则,导致布尔值被默认序列化为字符串,没法直接做布尔比较。

正确的配置写法

你只需要在event-properties里加上:boolean=true参数,告诉NLog把这个属性值解析为布尔类型,就能直接进行布尔值对比了:

<logger name="*" minlevel="Error" writeTo="Database" >
  <filters>
    <!-- 明确指定解析为布尔值,直接对比false -->
    <when condition="${event-properties:item=LogToDatabase:boolean=true} == false" action="Ignore"/>
  </filters>
</logger>

或者用更简洁的逻辑非写法:

<when condition="!${event-properties:item=LogToDatabase:boolean=true}" action="Ignore"/>

调用代码无需修改

你的原调用代码完全没问题,继续传入布尔值即可:

Log.Error().Message("test").Property("LogToDatabase", false).Write();

为什么原来的写法不生效?

原来的配置里${event-properties:item=LogToDatabase}默认会把属性值转成字符串,你传入的布尔false会被序列化为字符串"False"(注意首字母大写)。这时候你用== false对比,本质是字符串和布尔值的类型不匹配对比,自然不会生效。

而加上:boolean=true后,NLog会自动将属性值解析为布尔类型——不管你传入的是原生布尔值,还是字符串形式的"true"/"false"(大小写不敏感),都能正确识别并进行布尔判断。

另外还有一种更简洁的写法(效果和上面一致):

<when condition="${event-properties:LogToDatabase} != true" action="Ignore"/>

不过显式加上:boolean=true能避免类型歧义,让配置更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:04