appsettings.json 中的 Serilog 过滤器不起作用

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

我正在尝试在我的应用程序设置中使用 serilog 表达式实现日志过滤器,过滤所有“健康”相关日志。 这是我到目前为止的配置:

"Serilog": {
  "Using": [ "Serilog.Sinks.MSSqlServer" ],
  "MinimumLevel": "Debug",
  "WriteTo": [
    {
      "Name": "MSSqlServer",
      "Args": {
        "connectionString": "Data Source=XXX; Database=YYY; Integrated Security=True; TrustServerCertificate=true;",
        "sinkOptionsSection": {
          "tableName": "Logging",
          "autoCreateSqlDatabase": false,
          "autoCreateSqlTable": true
        },
        "columnOptionsSection": {
          "additionalColumns": [
            {
              "columnName": "RequestMethod",
              "dataLength": "8"
            },
            {
              "columnName": "StatusCode",
              "dataType": "Int"
            }
          ]
        },
        "Filter": [
          {
            "Name": "ByExcluding",
            "Args": {
              "expression": "RequestPath like '%/health%'"
            }
          }
        ]
      }
    }
  ],
  "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
  "Destructure": [
    {
      "Name": "ToMaximumDepth",
      "Args": { "maximumDestructuringDepth": 4 }
    },
    {
      "Name": "ToMaximumStringLength",
      "Args": { "maximumStringLength": 100 }
    },
    {
      "Name": "ToMaximumCollectionCount",
      "Args": { "maximumCollectionCount": 10 }
    }
  ],
  "Properties": {
    "Application": "Api"
  }
},

但是,与 HealthChecks 相关的消息继续记录在我的数据库中。 enter image description here

如何编写一个配置,通过仅包含、排除进行过滤或检查 Loggin 表中的列是否具有特定值?

谢谢

我阅读了关于 Serilog 表达式的 文档 ,但不太了解过滤器的工作原理:我可以使用哪些属性来过滤?我在哪里可以找到它们?它们是 MessageTemplate 列中的 {KEYS} 中的变量吗?我的自定义列怎么样:我可以过滤它们吗?

例如:MessageTemplate 'HTTP {RequestMethod} {RequestPath} 在 {Elapsed:0.0000} ms 中响应 {StatusCode} 中的消息为我提供了 {RequestPath} 变量,但是当我尝试在过滤器中使用它时(“表达式”: “RequestPath like '%/health%'”),没有任何反应。

c# asp.net-core serilog appsettings
1个回答
0
投票

Filter 部分位于 WriteTo 标记内的错误位置。 将其放在“Serilog”内部解决了问题。

  "Serilog": {
    "Using": [ "Serilog.Sinks.MSSqlServer" ],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "MSSqlServer",
        "Args": {
          "connectionString": "Data Source=XXX; Database=YYY; Integrated Security=True; TrustServerCertificate=true;",
          "sinkOptionsSection": {
            "tableName": "Logging",
            "autoCreateSqlDatabase": false,
            "autoCreateSqlTable": true
          },
          "columnOptionsSection": {
            "additionalColumns": [
              {
                "columnName": "RequestMethod",
                "dataType": "nvarchar",
                "dataLength": "8"
              },
              {
                "columnName": "StatusCode",
                "dataType": "Int"
              },
              {
                "columnName": "MachineName",
                "dataType": "nvarchar",
                "dataLength": "32"
              },
              {
                "columnName": "EnvironmentName",
                "dataType": "nvarchar",
                "dataLenght": "32"
              },
              {
                "columnName": "EnvironmentUserName",
                "dataType": "nvarchar",
                "dataLenght": "32"
              },
              {
                "columnName": "ClientIp",
                "dataType": "nvarchar",
                "dataLenght": "64"
              },
              {
                "columnName": "ThreadId",
                "dataType": "int"
              },
              {
                "columnName": "ThreadName",
                "dataType": "nvarchar",
                "dataLenght": "32"
              },
              {
                "columnName": "ProcessId",
                "dataType": "int"
              },
              {
                "columnName": "ProcessName",
                "dataType": "nvarchar",
                "dataLenght": "64"
              }
            ]
          }
        }
      }
    ],
    "Filter": [
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Contains(@m, 'health')"
        }
      },
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Contains(@m, 'Health_Homol')"
        }
      },
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Contains(@m, 'swagger')"
        }
      }
    ],
    "Enrich": [
      "FromLogContext",
      "WithMachineName",
      "WithEnvironmentName",
      "WithEnvironmentUserName",
      "WithThreadId",
      "WithThreadName",
      "WithClientIp",
      "WithProcessId",
      "WithProcessName"
    ],

    "Properties": {
      "Application": "Api"
    }
© www.soinside.com 2019 - 2024. All rights reserved.