Я использую Serilog.Extensions.Logging и вывод на консоль с этим outputTemplate:
"{Timestamp:HH:mm} [{Level:u3}] {Message} {Properties:j} {NewLine}"
Я хотел бы видеть, что сложные объекты, установленные с помощью BeginScope
, распадаются на Properties
. Вместо этого, кажется, используется имя типа.
var data = new Data { Id = 42, Name = "Hitchhiker" };
using (logger.BeginScope(new Dictionary<string, object> { { "Data", data } }))
{
logger.LogInformation("Hello world!");
}
Результат:
10:40 [INF] Hello world! {"SourceContext": "ConsoleApp3.Program", "Data": "ConsoleApp3.Data"}
Что я хочу:
10:40 [INF] Hello world! {"SourceContext": "ConsoleApp3.Program", "Data": { "Id" = 42, "Name" = "Hitchhiker"} }
Мне не хватает настройки конфигурации, или это просто невозможно?
edit
Только что заметил, что это может быть достигнуто vanil Serilog:
var dataLogger = logger.ForContext("Data", data, true);
Здесь последний параметр сообщает Serilog, что он должен разрушить сложный тип.