Выражение Serilog для исключения http 200 и http 302?

#asp.net-mvc #serilog

#asp.net-mvc #серилог

Вопрос:

Я использую serilog, и он хорошо регистрирует http-запросы на мой asp.net основное веб-приложение.

Однако я хочу отфильтровать шум http 200 и http 302 (в основном меня интересуют только 5xx и 4xx).

Я перепробовал множество вариантов следующего:

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

Но безрезультатно.

Свойства события входа выглядят следующим образом (:

 {  "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 обращает внимание, если я использую фильтр типа «@l = «Информация»», но любая попытка фильтрации на основе свойств LogEvent не работает.

Любая помощь будет признательна!

Ответ №1:

Серилог.Выражения не требуют расставления точек по Properties подобъекту: все свойства события являются именами верхнего уровня.

StatusCode это также число, а не строка, поэтому вам не нужны кавычки в массиве значений кода состояния для исключения.

Ваше выражение лица должно выглядеть так:

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