.net - NLog filter logging output from System.Net.Http.HttpClient - Stack Overflow

I have messages in my logs like this2025-03-07 14:47:38.7205 INFO System.Net.Http.HttpClient.signed.Log

I have messages in my logs like this

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"

I want to receive only warnings and errors from System.Net.Http.HttpClient.*.

This is my nlog.config:

<?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns=".xsd"
          xmlns:xsi=";
          xsi:schemaLocation=".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>
        <logger name="*" minlevel="Trace" writeTo="consoleTarget" >
        <logger name="*" minlevel="Trace"x writeTo="fileTarget">    
            <filters defaultAction="Log">
                <when condition="contains('${logger}', 'System.Net.Http.HttpClient') and level < LogLevel.Info" action="Ignore" />
            </filters>
        </logger>
    </rules>
</nlog>

But my filter doesn't work. I tried filter without level and it works:

<when condition="contains('${logger}', 'System.Net.Http.HttpClient')" action="Ignore" />

How to write a filter with a level?

I have messages in my logs like this

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"

I want to receive only warnings and errors from System.Net.Http.HttpClient.*.

This is my nlog.config:

<?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project./schemas/NLog.xsd"
          xmlns:xsi="http://www.w3./2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.nlog-project./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>
        <logger name="*" minlevel="Trace" writeTo="consoleTarget" >
        <logger name="*" minlevel="Trace"x writeTo="fileTarget">    
            <filters defaultAction="Log">
                <when condition="contains('${logger}', 'System.Net.Http.HttpClient') and level < LogLevel.Info" action="Ignore" />
            </filters>
        </logger>
    </rules>
</nlog>

But my filter doesn't work. I tried filter without level and it works:

<when condition="contains('${logger}', 'System.Net.Http.HttpClient')" action="Ignore" />

How to write a filter with a level?

Share edited Mar 7 at 18:08 Rolf Kristensen 20.1k2 gold badges58 silver badges83 bronze badges asked Mar 7 at 12:03 SullenManSullenMan 574 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Logging-Rules are much faster than filters, as the filter requires allocation of LogEventInfo to execute the filter.

I recommend that you use finalMinLevel to suppress noisy loggers, that has been introduced with NLog v5:

<?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project./schemas/NLog.xsd"
          xmlns:xsi="http://www.w3./2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.nlog-project./schemas/NLog.xsd NLog.xsd"
          autoReload="true"
          throwConfigExceptions="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>
        <logger name="*" minlevel="Trace" writeTo="consoleTarget" />
        <logger name="System.Net.Http*" finalMinLevel="Warn" />
        <logger name="*" minlevel="Trace" writeTo="fileTarget" />
    </rules>
</nlog>

See also: https://github/NLog/NLog/wiki/Logging-Rules-FinalMinLevel

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744930876a4601728.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信