如何在appsettings.json的NLog日志规则中指定多个过滤器
重复键错误根因
JSON结构天然不允许同一对象下存在重复的同名键,尝试添加额外过滤器时,如果是直接在filters节点下新增同级的第二个when键,会直接触发配置校验的重复键报错。这种写法既不符合JSON格式规范,也无法被NLog的配置绑定逻辑识别。
正确的多过滤器配置方式
NLog在加载appsettings.json这类基于Microsoft.Extensions.Configuration的配置源时,对多when过滤器的支持是通过将when字段从单对象结构调整为数组结构实现。这种写法和XML配置中并列多个<when>节点的运行效果完全对齐,不会存在功能差异。
正确的可运行配置示例:
"rules": [ { "logger": "*", "minLevel": "Debug", "writeTo": "db", "filters": { "when": [ { "condition": "equals('${event-properties:sublevel}','diagnostic')", "action": "Ignore" }, { "condition": "equals('${event-properties:sublevel}','trace-noop')", "action": "Ignore" } ] } } ]
配置注意事项
- 数组内的过滤规则会按照书写顺序依次执行匹配,遵循NLog WhenFilter的通用处理逻辑
- 你现有可正常运行的单对象
when写法本质是单元素数组的兼容简写,调整为数组结构后,单条规则的配置参数可以完全沿用原有写法,无需额外修改 - 所有when节点支持的配置属性(比如是否忽略大小写、自定义命中动作等)都可以在数组的每个元素中正常定义
内容的提问来源于stack exchange,提问作者John Butler
相关产品推荐
相关产品推荐

