如何配置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
相关产品推荐
相关产品推荐

