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

如何配置NLog过滤System.Net.Http.HttpClient仅输出警告及以上日志?

NLog配置:过滤System.Net.Http.HttpClient仅保留Warning/Error级别日志

问题背景

现有System.Net.Http.HttpClient相关日志如下:

2025-03-07 14:47:38.7205 INFO System.Net.Http.HttpClient.signed.LogicalHandler Start processing HTTP request POST http://localhost:5000/api/KATA/scans?sensorInstanceId=instance1
2025-03-07 14:47:38.7266 TRACE System.Net.Http.HttpClient.signed.LogicalHandler Request Headers:
Content-Type: multipart/form-data; boundary="48f29d53-2916-4b86-bc52-3283ad131dfc"

需求是仅接收System.Net.Http.HttpClient.*的Warning和Error级别日志,但当前NLog配置中的带级别过滤规则不生效,仅去掉级别条件的过滤规则能正常工作。

当前无效的NLog配置(rules部分):

<rules>
    <logger name="*" minlevel="Trace" writeTo="consoleTarget" >
    <logger name="*" minlevel="Trace" writeTo="fileTarget">    
        <filters defaultAction="Log">
            <when condition="contains('${logger}', 'System.Net.Http.HttpClient') and level < LogLevel.Info" action="Ignore" />
        </filters>
    </logger>
</rules>

解决方案

问题出在全局过滤器的条件逻辑和NLog规则匹配机制上,更可靠的方式是为System.Net.Http.HttpClient前缀的日志单独配置规则,明确指定日志级别范围,同时避免全局规则重复处理。

修改后的完整NLog配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true">
    <targets>
        <target xsi:type="File" name="fileTarget" fileName="${basedir}/logs/${shortdate}.log" 
                layout="${longdate} ${uppercase:${level}} ${logger} ${message}" />
        <target xsi:type="ColoredConsole" name="consoleTarget"  layout="${longdate} ${uppercase:${level}} ${logger} ${message}" />
    </targets>
    <rules>
        <!-- 仅记录System.Net.Http.HttpClient前缀的Warning及以上级别日志 -->
        <logger name="System.Net.Http.HttpClient*" minlevel="Warn" writeTo="consoleTarget,fileTarget" final="true" />
        
        <!-- 全局日志规则:记录所有其他日志的Trace及以上级别 -->
        <logger name="*" minlevel="Trace" writeTo="consoleTarget" />
        <logger name="*" minlevel="Trace" writeTo="fileTarget" />
    </rules>
</nlog>

配置说明

  • <logger name="System.Net.Http.HttpClient*" minlevel="Warn" writeTo="consoleTarget,fileTarget" final="true" />:
    • name="System.Net.Http.HttpClient*":匹配所有以System.Net.Http.HttpClient开头的日志记录器
    • minlevel="Warn":仅记录Warning、Error、Fatal级别日志(符合需求)
    • final="true":标记该规则为最终规则,匹配后不再执行后续规则,避免全局规则重复处理这些日志
  • 全局规则处理除System.Net.Http.HttpClient外的所有日志,保持原有的Trace级别记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:38:13