NLog 4.75日志过滤器失效求解决方案(5.0版本正常)
解决NLog 4.75版本中未过滤无JobName日志的问题
在NLog 4.x版本中,直接用'${event-properties:JobName}' != ''作为过滤条件,可能因为属性未定义时的渲染行为导致判断失效,进而生成无JobName前缀的日志文件。以下是几个可行的解决办法:
方案一:检查JobName属性是否存在
改用contains-key语法直接判断事件属性集合中是否包含JobName键,这个判断比值非空更可靠,能精准过滤掉完全未设置该属性的日志:<logger name="*" minlevel="Debug" writeTo="jobFile" > <filters default-action="Ignore"> <when condition="${event-properties:contains-key=JobName}" action="Log" /> </filters> </logger>方案二:双重判断(属性存在+值非空)
如果需要同时确保JobName存在且值不为空,用逻辑与组合两个条件:<logger name="*" minlevel="Debug" writeTo="jobFile" > <filters default-action="Ignore"> <when condition="${event-properties:contains-key=JobName} and ('${event-properties:JobName}' != '')" action="Log" /> </filters> </logger>方案三:在File目标中直接添加条件
放弃logger过滤器,直接在jobFile目标配置里加入condition属性,目标级别的判断在NLog 4.x中执行时机更靠前,能有效拦截不符合条件的日志写入:<target name="jobFile" xsi:type="File" fileName="${event-properties:JobName}-${date:format=yyyyMMdd}.log" condition="${event-properties:contains-key=JobName} and ('${event-properties:JobName}' != '')" />
修改配置后重启应用,测试无JobName的日志是否还会生成空前缀文件,同时验证正常日志的写入路径是否符合预期。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

