#c# #serilog
#c# #серилог
Вопрос:
Я использую Serilog для ведения журнала и использую средство записи консоли для отправки журналов в стандартный вывод, который будет подхвачен Filebeat и отправлен в Elastic. Конфигурация регистратора включает в себя следующее:
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{Properties:j}{NewLine}{Exception}")
Все это нормально, структурированные свойства выводятся и отображаются в формате JSON правильно, однако в нем отсутствует значение свойства MessageTemplate, которое выводило бы что-то похожее на:
"MessageTemplate":"User {Username} logged in successfully"
Это проблема, потому что было бы полезно иметь возможность запускать запросы в Kibana, чтобы показывать, сколько раз пользователи входят в систему, путем поиска шаблона сообщения, а не отображаемого сообщения, которое было бы специфичным для одного пользователя, например:
"Message":"User "Joe Bloggs" logged in successfully"
Я вижу, что могу использовать объект JsonFormatter для записи в консоль с помощью:
.WriteTo.Console(new JsonFormatter(renderMessage: true))
Использование этого метода выводит как сообщение, так и свойства шаблона сообщения, но делает это в виде уродливого большого двоичного объекта JSON, который действительно трудно прочитать, когда человек просматривает журналы в командной строке.
Кто-нибудь знает, возможно ли, чтобы шаблон вывода консоли Serilog включал табличку сообщения?
Ответ №1:
Серилог.Выражения могут это сделать.
dotnet add package Serilog.Expressions
затем:
.WriteTo.Console(new ExpressionTemplate( "[{@t:HH:mm:ss} {@l:u3}] {@m} { {..@p, MessageTemplate: @mt} }n{@x}"))
Комментарии:
1. В точку, спасибо @Николас Блюмхардт 🙂
2. Потрясающе 🙂 — пожалуйста!