#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]