Как я могу увидеть табличку сообщения при использовании Serilog writeTo.Console?

#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. Потрясающе 🙂 — пожалуйста!