Я думаю, что сейчас происходит то, что ваши "события журнала" правильно обогащены всей информацией, но приемник File
не настроен должным образом для отображения этой информации.
Значение по умолчанию шаблон вывода приемника File
равен {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} \[{Level:u3}\] {Message:lj}{NewLine}{Exception}
, что означает, что он будет правильно отображать «обработанное сообщение» (шаблон сообщения + значение свойств, на которые есть ссылки вшаблон сообщения).
Вам необходимо настроить его таким образом, чтобы все дополнительные свойства (те, которые добавляются к каждому событию журнала при его обогащении) также отображались.
ДляFile
раковина, вы можете, например, добавить специальную директиву {Properties}
в ваш шаблон вывода, которая будет показывать все свойства, которые прикреплены к событию, но не отображаются как часть сообщения.template.
Это будет выглядеть следующим образом:
Log.Logger = new LoggerConfiguration()
.Enrich.WithWebApiActionName()
.WriteTo.File("D:/mytestresults.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} \[{Level:u3}\] {Message:lj}{Properties}{NewLine}{Exception}")
.CreateLogger();
(или {Properties:j}
для их форматирования в формате JSON).
Это выведет все свойства, прикрепленные ксобытие, но не находится где-либо еще в шаблоне вывода.
Если вас интересует только WebApiAction
, вы также можете сделать что-то вроде:
Log.Logger = new LoggerConfiguration()
.Enrich.WithWebApiActionName()
.WriteTo.File("D:/mytestresults.txt", outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} \[{Level:u3}\]<{WebApiAction}> {Message:lj}{NewLine}{Exception}")
.CreateLogger();
... и тогда выв результате получится следующее:
2019-03-26 10:09:13.621 -04:00 [INF]<MyActionName> HTTP GET /api/actions/ responded 200 in 9ms
ОБНОВЛЕНИЕ
Похоже, это не проблема "форматирования вывода", так какВы можете правильно отобразить некоторые прикрепленные свойства...
.WithUserName
и .WithRequestUrl
не привязаны к WebApi и могут быть легко собраны для любого приложения ASP.NET.Расширения .WithWebApi*
основаны на IAuthenticationFilter
, который мы объявляем в Web API при запуске благодаря этой строке ...
Вот возможные сценарии, которые могут объяснить отсутствие обогащения: - по какой-то причине атрибут сборки PreApplicationStartMethod
не работает должным образом - по какой-то причине регистрация StoreWebApInfoInHttpContextAuthenticationFilter
в Web API не работает - по какой-то причине мы не можем извлечьинформация из ActionContext
Возможно, вы делаете "странные" вещи с зарегистрированными AuthenticationFilter
при запуске?
Вероятно, лучше попытаться отследить это как часть проблемы, о которой вы сообщили здесь: https://github.com/serilog-web/classic-webapi/issues/18;)