appsettings.json 中的 Filters.Expressions 中的 Serilog 和过滤器

问题描述 投票:0回答:2

我们希望获得以下日志:

  1. 控制台(所有日志)
  2. 文件(所有日志)
  3. 文件(仅过滤日志

所有这些都在 appsettings.json 中配置。

这是应用程序的 appsettings.json 文件:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Literate", "Serilog.Sinks.File", "Serilog.Filters.Expressions" ],
    "MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "LiterateConsole"
      },
      {
        "Name": "File",
        "Args": {
          "path": "%TEMP%\\Logs\\FileWithoutFilter-.log",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
          "rollingInterval": "Day"
        }
      },
      {
        "Name": "File",
        "Args": {
          "path": "%TEMP%\\Logs\\UPLOADERROR-.log",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        },
        "Filter": [
          {
            "Name": "ByIncludingOnly",
            "Args": {
              "expression": "@Level = 'Error' and UploadError is not null"
            }
          }
        ]
      }
    ]
  }
}

但是,尽管控制台和文件(不带过滤)运行良好,带过滤的文件正在记录所有行,就像文件(不带过滤器)一样。

我们正在用 C# 代码发送此 log.error 行:

Log.Error("Fichero con error {@UploadError}", true);

但是,我说过,所有行都会记录到 UPLOADERROR 文件中

知道 appsettings.file 有什么问题吗?

问候。

logging .net-core console-application serilog
2个回答
11
投票

解决方案是使用 sublogger 和 serilog。然后,您必须使用过滤和接收器配置子记录器。

仔细阅读与常规、配置和过滤器相关的 serilog 文档就是诀窍。

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Literate", "Serilog.Sinks.File", "Serilog.Filters.Expressions" ],
    "MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "LiterateConsole"
      },
      {
        "Name": "File",
        "Args": {
          "path": "%TEMP%\\Logs\\FileWithoutFilter-.log",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
          "rollingInterval": "Day"
        }
      },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "@Level = 'Error' and UploadError is not null"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "File",
                "Args": {
                  "path": "%TEMP%\\Logs\\UPLOADERROR-.log",
                  "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
                }
              }
            ]
          }
        }
      }
    ]
  }
}

使用之前的配置,现在一切正常。


0
投票

实际 Serilog 的酷 appsettings.yaml 配置。

Serilog:
  "Using": ["Serilog.Expressions"]
  MinimumLevel: Information
  Enrich:
    - FromLogContext
  
  WriteTo:
    - Name: Logger
      Args:
        configureLogger:
          MinimumLevel: Information
          Filter:
            - Name: ByIncludingOnly
              Args:
                #Static: Log.Logger = mainLogger.ForContext("SourceContext", "Static");
                expression: StartsWith(SourceContext, 'Microsoft.Hosting.Lifetime') or StartsWith(SourceContext, 'Static') or @l = 'Error' or @l = 'Critical' or @l = 'Warning'
          WriteTo:
            - Name: Console
              Args:
                outputTemplate: "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
            - Name: File
              Args:
                path: logs/important.txt
                outputTemplate: "[{Timestamp:HH:mm:ss}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
                
    - Name: Logger
      Args:
        configureLogger:
          MinimumLevel: Debug
          WriteTo:
            - Name: File
              Args:
                path: logs/full.txt
                rollingInterval: Day
                outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
                
    - Name: Logger
      Args:
        configureLogger:
          MinimumLevel: Warning
          WriteTo:
            - Name: File
              Args:
                path: logs/problems.txt
                outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
© www.soinside.com 2019 - 2024. All rights reserved.