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

时间:2018-03-16 07:32:10

标签: logging .net-core console-application serilog

我们想获取日志:

  1. 控制台(所有日志)
  2. 文件(所有日志)
  3. 文件(仅过滤日志
  4. 所有这些都在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"
                }
              }
            ]
          }
        ]
      }
    }
    

    但是,尽管Console和File(没有过滤)运行正常,但带过滤的文件正在记录所有行,例如文件(没有过滤器)。

    我们将在C#代码中发送此log.error行:

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

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

    有些人认为appsettings.file有什么问题吗?

    问候。

1 个答案:

答案 0 :(得分:2)

解决方案是使用带有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}"
                }
              }
            ]
          }
        }
      }
    ]
  }
}

以前的配置现在一切正常。