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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:10:01