Wrapper for Common Logging на основе NLog? - PullRequest
0 голосов
/ 07 мая 2018

Мы хотим использовать общую библиотеку журналов для веб-приложений ASP.Net Core, функций Azure и веб-служб. NLog кажется хорошим вариантом, поскольку он имеет несколько целей, например Информация о приложении и хранилище таблиц Azure. В идеале я хотел бы сделать что-то вроде вызова CommonTrace (сообщение) и иметь эту функцию

(1) отслеживать другую информацию, такую ​​как (a) Окружающая среда - DEV, TEST, PROD; (b) местное время, (c) System.Runtime.CompilerServices.CallerLineNumber (d) вызов приложения и т. д.

(2) Позвоните в NLog, чтобы записать сообщение и другую информацию. Обратите внимание, что другая информация может быть добавлена ​​к сообщению или сохранена каким-либо другим способом.

Но когда я узнаю больше о NLog и ASP.NET Core, кажется, что если наивно создать базовый класс-обертку для добавления дополнительной информации, можно потерять множество функций, например, доступ к информации о месте вызова и заголовке, которую предоставляют NLog и Microsoft.Extensions.Logging.

Итак, возможно ли полностью создать подкласс NLog, а затем использовать эту оболочку, как это обычно делается в NLog с ASP.Net Core. Или есть ли лучший способ добавить общую информацию из нескольких приложений при использовании NLog?

1 Ответ

0 голосов
/ 07 мая 2018

NLog может захватывать множество свойств контекста, без непосредственного добавления их в лог-операцию.

Они автоматически захватываются макетами, настроенными для цели NLog. Некоторые цели NLog позволяют добавлять любое количество свойств.

Это можно увидеть с помощью NLog Application Insight Target (версия 2.6.4), которая теперь имеет возможность добавлять один (или несколько) «ContextProperty» -элементов. Они будут автоматически включены как метаданные при каждой операции журнала:

https://github.com/Microsoft/ApplicationInsights-dotnet-logging/pull/183

Если цель NLog не поддерживает ContextProperty, то можно также обратиться к NLog JsonLayout, который позволяет добавлять метаданные в качестве дополнительных атрибутов Json:

https://github.com/NLog/NLog/wiki/JsonLayout

Если ваша любимая пользовательская цель NLog поддерживает свойства структурированного ведения журнала, то для добавления поддержки ContextProperty-elements следует внести небольшие изменения (простой способ - наследовать от NLog TargetWithContext и просто использовать GetAllProperties -method):

https://github.com/AlanBarber/NLog.Targets.Splunk

...