NLog.Extensions.Logging структурированных журналов - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать провайдера NLog для входа в мое основное приложение .net. Я использую пример кода на сайте GitHub. Форматированное ведение журнала работает просто отлично, но структурированное ведение журнала не работает. Я использую следующий код для инициализации регистратора

var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
loggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration("nlog.config");

Logger внедряется в приложение с помощью Microsoft DI, и оператор ведения журнала выглядит так, где действие является экземпляром некоторого сложного типа

_logger.LogInformation("Test {@action}", action);

Если я не использую абстракцию журналирования Microsoft и создаю экземпляр регистратора с помощью диспетчера журналов NLog, структурированное ведение журнала работает нормально

NLog.LogManager.LoadConfiguration("nlog.config");
_logger = NLog.LogManager.GetCurrentClassLogger();

И если я использую SeriLog с абстракцией журналирования Microsoft, она также работает нормально. И форматированный журнал, и структурированные журналы работают, используя следующий код для инициализации регистратора

loggerFactory.AddSerilog();
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .CreateLogger();

Это заставило меня задуматься, единственное возможное объяснение - это NLog.Extensions.Logging (предоставленный совместно Microsoft и NLog) пока не поддерживает структурированное ведение журнала, хотя Nlog поддерживает. Я не мог найти информацию, чтобы сказать, что это не делает.

Может кто-нибудь подтвердить, поддерживается ли он или нет, и, надеюсь, указать на рабочий пример?

1 Ответ

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

Microsoft Extension Logging поддерживает структурированное ведение журнала, но не спецификацию шаблонов сообщений @ и $

NLog использует форматер Microsoft Extension Logging для ${message}, поскольку Microsoft Extension Logging уже потратила время на анализ и форматирование шаблона ввода.

NLog может собирать параметры каротажа вместе со спецификациями @ и $. Это используется JsonLayout, который автоматически использует их для правильной json-сериализации свойств структурированного ведения журнала (когда MaxRecursionLimit равен 1 или выше)

...