web-dev-qa-db-ja.com

HTTP 200とHTTP 302を除外するためのSerilog式?

Serilogを使用しています。

ただし、HTTP 200とHTTP 302のノイズを除外したい(基本的には5xxと4xxに関心のあるものだけが興味があります)。

私は次のように多くのバリエーションを試みました:

... snip ...
"Using": [ "Serilog.Expressions" ],
"Filter": [
  {
    "Name": "ByExcluding",
    "Args": {
      "expression": "@l = 'Information' and Properties.StatusCode in ['200', '302']"
    }
  }
],
... snip ...
 _

しかし成功することはできません。

LogEventプロパティは(:

{
  "TimeStamp": "2021-12-09T09:00:18.1586954",
  "Level": "Information",
  "Message": "HTTP \"GET\" \"/xxx/yyy\" responded 200 in 50.2048 ms",
  "MessageTemplate": "HTTP {RequestMethod} {RequestPath} responded {StatusCode} in {Elapsed:0.0000} ms",
  "Properties": {
    "RequestMethod": "GET",
    "RequestPath": "/xxx/yyy",
    "StatusCode": 200,
    "Elapsed": 50.2048,
    "SourceContext": "Serilog.AspNetCore.RequestLoggingMiddleware",
    "RequestId": "8000050f-0006-eb00-b63f-84710c7967bb"
  },
  "Renderings": {
    "Elapsed": [
      {
        "Format": "0.0000",
        "Rendering": "50.2048"
      }
    ]
  }
}
 _

Serilog is "@ l = '情報'"のようなフィルタを使用すると注意を払いますが、LogEventプロパティに基づいてフィルタリングしようとする試みは機能しません。

あらゆる助けが高く評価されるでしょう!

2
user2845090

Serilog.ExpressionsProperties subObjectを介してドットティングを必要としません:すべてのイベントのプロパティは最上位の名前です。

StatusCodeも文字列ではなく数値であるため、除外するステータスコード値の配列内の引用符は必要ありません。

あなたの表現は次のようになります。

@l = 'Information' and StatusCode in [200, 302]
 _
1