使用nLog时能否通过配置修改待写入日志条目的日志级别
解答
可以通过NLog原生配置实现日志写入目标输出端前的级别修改,无需调整业务代码或第三方类库逻辑。
实现方案
NLog 4.5及以上版本支持在过滤器规则中直接重写日志级别,你只需要在<when>规则中设置action为Log,同时通过level参数指定目标日志级别即可。
基础场景配置(按命名空间+原有级别重写)
比如将指定命名空间下的所有Warn级别日志重写为Info:
<logger name="Your.ClassLibrary.Namespace.*" writeTo="file"> <filters defaultAction="Log"> <when condition="level == LogLevel.Warn" action="Log" level="Info" /> </filters> </logger>
复杂场景配置(按消息内容+原有级别重写)
比如将包含特定关键词的Warn级别日志重写为Debug:
<logger name="*" writeTo="allLogs"> <filters defaultAction="Log"> <when condition="contains('${message}','已修复的旧漏洞标识') and level == LogLevel.Warn" action="Log" level="Debug" /> </filters> </logger>
注意事项
- 级别重写操作的执行优先级高于输出端的级别匹配规则,重写后的级别会作为输出端过滤判断的唯一依据,完全符合需求
- 多规则场景下过滤器会按照从上到下的顺序匹配,命中第一条符合条件的规则后就会执行对应操作,配置时注意规则顺序
- 所有修改纯配置生效,不需要调整原有日志埋点逻辑
内容的提问来源于stack exchange,提问作者Mike Schall
相关产品推荐
相关产品推荐

