admin管理员组

文章数量:1125738

I'm using NLog.Extensions.Logging v5.3.15 (NLog v5.3.4) in my .Net 8 Console Application.

I want, that loggers called Microsoft.* write with minimum Log-level Info and all the rest of loggers with minimum log-Level Trace. Both rules should write to the same target (of type File).

My rules-section (json) looks like the following:

      "rules": [
         {
            "logger": "Microsoft.*",
            "enabled": true,
            "level": "Info",
            "ruleName": "ruleInfo",
            "writeTo": "targetFile",
            "final": true
         },
         {
            "logger": "*",
            "enabled": true,
            "minLevel": "Trace",
            "ruleName": "ruleTrace",
            "writeTo": "targetFile"
         }
      ]

However, this configuration writes all loggers with minimum log-level Trace.

The NLog internal Log-file (in Debug-level) shows that this Rule-configuration obviously is not the correct one:

2025-01-09 18:41:27.2665 Debug Message Template Auto Format enabled
2025-01-09 18:41:27.3474 Debug Wrapping target 'targetFile' with AsyncTargetWrapper and renaming to 'targetFile_wrapped'
2025-01-09 18:41:27.3474 Debug Adding target NLog.Targets.Wrappers.AsyncTargetWrapper(Name=targetFile)
2025-01-09 18:41:27.3474 Info Registered target NLog.Targets.Wrappers.AsyncTargetWrapper(Name=targetFile)
2025-01-09 18:41:27.3474 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.3.4.2778. Product version: 5.3.4+73d83d3161d31288ca5c554cc50d27b6bed5f28b. GlobalAssemblyCache: False
2025-01-09 18:41:27.3474 Debug --- NLog configuration dump ---
2025-01-09 18:41:27.3474 Debug Targets:
2025-01-09 18:41:27.3474 Debug AsyncWrapper_FileTarget(Name=targetFile)
2025-01-09 18:41:27.3474 Debug Rules:
2025-01-09 18:41:27.3474 Debug logNamePattern: (Microsoft.:StartsWith) levels: [ Info ] writeTo: [ targetFile ] final: True
2025-01-09 18:41:27.3474 Debug logNamePattern: (:All) levels: [ Trace Debug Info Warn Error Fatal ] writeTo: [ targetFile ]
2025-01-09 18:41:27.3474 Debug --- End of NLog configuration dump ---
2025-01-09 18:41:27.3750 Info Validating config: TargetNames=targetFile, ConfigItems=22 ConfigSection=NLog
2025-01-09 18:41:27.3750 Debug Unused target checking is started... Rule Count: 2, Target Count: 1
2025-01-09 18:41:27.3802 Debug Unused target checking is completed. Total Rule Count: 2, Total Target Count: 1, Unused Target Count: 0
2025-01-09 18:41:27.3955 Info Configuration initialized.
2025-01-09 18:41:27.4161 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.Internal.ApplicationLifetime
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Trace] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Debug] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Info] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Warn] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Error] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Fatal] => targetFile
2025-01-09 18:41:27.4238 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.Internal.Host
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Trace] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Debug] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Info] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Warn] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Error] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Fatal] => targetFile
2025-01-09 18:41:27.4238 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Hosting.Lifetime
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Trace] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Debug] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Info] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Warn] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Error] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Fatal] => targetFile
2025-01-09 18:41:27.4573 Debug Targets configured when LogLevel >= Trace for Logger: HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Trace] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Debug] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Info] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Warn] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Error] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Fatal] => targetFile
2025-01-09 18:41:27.4573 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.BackgroundService
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Trace] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Debug] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Info] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Warn] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Error] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Fatal] => targetFile
2025-01-09 18:41:27.4868 Debug FileTarget(Name=targetFile_wrapped): Preparing for new file: 'D:\src-hpg\HPG.Prototypes\HPG.Proto.NLoggerForNetCore\HPG.Proto.NLoggerForNetCore.ConsoleAppHosted\bin\Debug\net8.0\HOT-CP-PF51VH27__2025-01-09T174127Z__pid55280.log'
2025-01-09 18:41:27.4868 Debug FileTarget(Name=targetFile_wrapped): Creating file appender: 'D:\src-hpg\HPG.Prototypes\HPG.Proto.NLoggerForNetCore\HPG.Proto.NLoggerForNetCore.ConsoleAppHosted\bin\Debug\net8.0\HOT-CP-PF51VH27__2025-01-09T174127Z__pid55280.log'

How should the json configuration for NLog look like to achieve the behaviour I'm looking for?

I'm using NLog.Extensions.Logging v5.3.15 (NLog v5.3.4) in my .Net 8 Console Application.

I want, that loggers called Microsoft.* write with minimum Log-level Info and all the rest of loggers with minimum log-Level Trace. Both rules should write to the same target (of type File).

My rules-section (json) looks like the following:

      "rules": [
         {
            "logger": "Microsoft.*",
            "enabled": true,
            "level": "Info",
            "ruleName": "ruleInfo",
            "writeTo": "targetFile",
            "final": true
         },
         {
            "logger": "*",
            "enabled": true,
            "minLevel": "Trace",
            "ruleName": "ruleTrace",
            "writeTo": "targetFile"
         }
      ]

However, this configuration writes all loggers with minimum log-level Trace.

The NLog internal Log-file (in Debug-level) shows that this Rule-configuration obviously is not the correct one:

2025-01-09 18:41:27.2665 Debug Message Template Auto Format enabled
2025-01-09 18:41:27.3474 Debug Wrapping target 'targetFile' with AsyncTargetWrapper and renaming to 'targetFile_wrapped'
2025-01-09 18:41:27.3474 Debug Adding target NLog.Targets.Wrappers.AsyncTargetWrapper(Name=targetFile)
2025-01-09 18:41:27.3474 Info Registered target NLog.Targets.Wrappers.AsyncTargetWrapper(Name=targetFile)
2025-01-09 18:41:27.3474 Info NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c. File version: 5.3.4.2778. Product version: 5.3.4+73d83d3161d31288ca5c554cc50d27b6bed5f28b. GlobalAssemblyCache: False
2025-01-09 18:41:27.3474 Debug --- NLog configuration dump ---
2025-01-09 18:41:27.3474 Debug Targets:
2025-01-09 18:41:27.3474 Debug AsyncWrapper_FileTarget(Name=targetFile)
2025-01-09 18:41:27.3474 Debug Rules:
2025-01-09 18:41:27.3474 Debug logNamePattern: (Microsoft.:StartsWith) levels: [ Info ] writeTo: [ targetFile ] final: True
2025-01-09 18:41:27.3474 Debug logNamePattern: (:All) levels: [ Trace Debug Info Warn Error Fatal ] writeTo: [ targetFile ]
2025-01-09 18:41:27.3474 Debug --- End of NLog configuration dump ---
2025-01-09 18:41:27.3750 Info Validating config: TargetNames=targetFile, ConfigItems=22 ConfigSection=NLog
2025-01-09 18:41:27.3750 Debug Unused target checking is started... Rule Count: 2, Target Count: 1
2025-01-09 18:41:27.3802 Debug Unused target checking is completed. Total Rule Count: 2, Total Target Count: 1, Unused Target Count: 0
2025-01-09 18:41:27.3955 Info Configuration initialized.
2025-01-09 18:41:27.4161 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.Internal.ApplicationLifetime
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Trace] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Debug] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Info] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Warn] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Error] => targetFile
2025-01-09 18:41:27.4161 Debug Logger Microsoft.Extensions.Hosting.Internal.ApplicationLifetime [Fatal] => targetFile
2025-01-09 18:41:27.4238 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.Internal.Host
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Trace] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Debug] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Info] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Warn] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Error] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Extensions.Hosting.Internal.Host [Fatal] => targetFile
2025-01-09 18:41:27.4238 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Hosting.Lifetime
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Trace] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Debug] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Info] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Warn] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Error] => targetFile
2025-01-09 18:41:27.4238 Debug Logger Microsoft.Hosting.Lifetime [Fatal] => targetFile
2025-01-09 18:41:27.4573 Debug Targets configured when LogLevel >= Trace for Logger: HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Trace] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Debug] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Info] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Warn] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Error] => targetFile
2025-01-09 18:41:27.4573 Debug Logger HPG.Proto.NLoggerForNetCore.ConsoleAppHosted.MyHostedService [Fatal] => targetFile
2025-01-09 18:41:27.4573 Debug Targets configured when LogLevel >= Trace for Logger: Microsoft.Extensions.Hosting.BackgroundService
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Trace] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Debug] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Info] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Warn] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Error] => targetFile
2025-01-09 18:41:27.4573 Debug Logger Microsoft.Extensions.Hosting.BackgroundService [Fatal] => targetFile
2025-01-09 18:41:27.4868 Debug FileTarget(Name=targetFile_wrapped): Preparing for new file: 'D:\src-hpg\HPG.Prototypes\HPG.Proto.NLoggerForNetCore\HPG.Proto.NLoggerForNetCore.ConsoleAppHosted\bin\Debug\net8.0\HOT-CP-PF51VH27__2025-01-09T174127Z__pid55280.log'
2025-01-09 18:41:27.4868 Debug FileTarget(Name=targetFile_wrapped): Creating file appender: 'D:\src-hpg\HPG.Prototypes\HPG.Proto.NLoggerForNetCore\HPG.Proto.NLoggerForNetCore.ConsoleAppHosted\bin\Debug\net8.0\HOT-CP-PF51VH27__2025-01-09T174127Z__pid55280.log'

How should the json configuration for NLog look like to achieve the behaviour I'm looking for?

Share Improve this question asked 2 days ago tommijotommijo 651 silver badge7 bronze badges 3
  • 1 I recommend that you remove "level": "Info" + "final": true + "enabled": true + "writeTo": "targetFile" and replace with "finalMinLevel": "Info". See also: github.com/NLog/NLog/wiki/Logging-Rules-FinalMinLevel – Rolf Kristensen Commented yesterday
  • thx @RolfKristensen. You are a star and you deserve a stackOverflow star! And the document you provided even resolved yet another theme I was wondering: Microsoft Extensions Logging Filters Really pity, that neither google, copilot nor our company's Microsoft AI chat could not provide a solution or the link to this document. – tommijo Commented yesterday
  • Happy that you found a solution. Have now posted my comment as answer to your question. – Rolf Kristensen Commented yesterday
Add a comment  | 

1 Answer 1

Reset to default 1

NLog v5 introduces the FinalMinLevel, which you can use like this:

      "rules": [
         {
            "logger": "Microsoft.*",
            "finalMinLevel": "Info"
         },
         {
            "logger": "*",
            "enabled": true,
            "minLevel": "Trace",
            "ruleName": "ruleTrace",
            "writeTo": "targetFile"
         }
      ]

FinalMinLevel allows you to suppress logging-output from matching Loggers. The above configuration will allow LogLevel Info (And more severe) but suppress Debug + Trace.

本文标签: