代码之家  ›  专栏  ›  技术社区  ›  ferpega

Serilog和过滤器中的过滤器。appsettings中的表达式。json

  •  4
  • ferpega  · 技术社区  · 7 年前

    我们想获取以下内容的日志:

    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("Fichero con error {@UploadError}", true);
    

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

    了解appsettings中的错误。文件

    当做

    1 回复  |  直到 7 年前
        1
  •  9
  •   David Gardiner    4 年前

    解决方案是将子日志记录器与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}"
                    }
                  }
                ]
              }
            }
          }
        ]
      }
    }
    

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