2015-10-06 6 views
2

Я работаю с Serilog и записываю события на SQL Server (используя библиотеки Serilog, Serilog.Framework.Logging и Serilog.Sinks.MSSqlServer).Serilog Дополнительные свойства

Как часть приложения MVC6, когда я регистрирую события и устанавливаю параметр для включения свойств, я вижу некоторые дополнительные свойства в столбце XML.

Если я выдаю что-то вроде следующего утверждения:

Log.Information("{Property1}", "Value1"); 

я вижу что-то вроде следующего в столбце Свойства:

<properties> 
    <property key="Property1">Value1</property> 
    <property key="SourceContext">WebApplication4.Controllers.BaseController</property> 
    <property key="ActionId">1b9f9c7e-7c5c-4b14-a30d-99f2ebc88c51</property> 
    <property key="RequestId">80000191-0001-f000-b63f-84710c7967bb</property> 
</properties> 

Где эти дополнительные свойства взялось? Могу ли я установить дополнительные свойства, подобные этим? Если да, где я их устанавливаю? Я могу установить дополнительные свойства, если я включу их в сообщение (аналогично Property1 выше), но я могу включить дополнительные свойства, которых нет в сообщении.

ответ

5

Существует три способа сделать это.

Первый заключается в использовании ForContext() для создания экземпляра регистратора с определенными свойствами прикрепленный:

var specific = Log.ForContext("SomeProperty", 42); 
specific.Information("This has properties attached"); 

Вторым использованием обогатителей:

Log.Logger = new LoggerConfiguration() 
    .Enrich.WithMachineName() 
    // Other config... 

В-третий, LogContext.

using (LogContext.PushProperty("SomeProperty", 42)) 
{ 
    Log.Information("This has properties attached"); 
} 

Некоторые незначительные настройки для этого требуется, проверьте информацию о Serilog wiki.

+0

Я помню, как читал о первых двух вариантах, но по какой-то причине информация не прилипала. Последний вариант был для меня новым и выглядит как наиболее желательный вариант на данный момент. Один из других вопросов, которые я задал, - это то, откуда возникают дополнительные свойства при использовании MVC (ActionId, RequestId и т. Д.)? Где они * впрыскиваются *? Что они представляют? Я немного просмотрел код, но не помню, чтобы увидеть, где они установлены. Во всяком случае, я указал информацию, которую вы предоставили в качестве ответа. Спасибо. –

+0

Извините за поздний ответ. Связанные с веб-ресурсами свойства, которые вы часто видите, взяты из: https://github.com/serilog-web/classic. –