2015-02-11 6 views
3

У меня есть следующий код.Serilog не производит ожидаемый json

Serilog.ILogger logger = Serilog.Log.Logger; 
logger = new LoggerConfiguration() 
    .WriteTo.Sink(new FileSink(@"c:\temp\mylogs.txt", new JsonFormatter(), null)).MinimumLevel.Debug() 
    .CreateLogger(); 
var newType = new MyType() { Game = "Poker", HasValue = false, Name = "Dave", TimeOfEntry = DateTime.Now.AddDays(-1) }; 
logger.Debug("This is the new type {NewType} generated at {Time}", newType, DateTime.Now); 

Файл журнала показывает следующие

{"Timestamp":"2015-02-11T00:53:51.8501574-05:00","Level":"Debug","MessageTemplate":"This is the new type {NewType} generated at {Time}","Properties":{"NewType":"ConsoleTestApp.MyType","Time":"2015-02-11T00:53:51.8491563-05:00"}} 

та часть, которая не имеет смысла в выходном файле журнала заключается в следующем:

{"NewType":"ConsoleTestApp.MyType", ... 

Я ожидал что-то подобное.

{"NewType": {Game = "Poker", HasValue = false, Name = "Dave", ... 

Я сделал что-то не так?

ответ

7

По умолчанию Serilog будет ToString() любых неизвестных типов, передаваемых в шаблоны сообщений.

Чтобы активировать то, что вызывает Serilog «деструктурирующие» (то есть сериализации), вам необходимо предварять АТ-знак @ на имя свойства:

logger.Debug("This is the new type {@NewType} generated at {Time}", newType, DateTime.Now); 
+0

спасибо, что это было! – SamDevx

Смежные вопросы