Как сделать так, чтобы выходные данные NLog отображались в журналах потоковой передачи для функции Azure?

У меня есть простая функция Azure, и я хотел бы иметь возможность отслеживать выходные данные журнала как в окне журнала потоковой передачи, так и в Application Insights.

Пока я могу видеть выходные данные NLog в Application Insights, но не в окне потоковой передачи. Выходные данные Microsoft ILogger отображаются в обоих случаях.

Вот что я сделал до сих пор:

  • Создал базовую тестовую функцию Azure.
  • На портале Azure я включил Application Insights.
  • Установлены зависимости NLog и Microsoft.ApplicationInsights.NLogTarget nuget для функции.
  • В функцию добавлен код для программного создания цели nlog Application Insights.
  • После прочтения этих вопросов... Потоковая передача журналов Azure с помощью NLog и Как интегрировать NLog для записи журнала в журнал потоковой передачи Azure я также программно добавил NLog TraceTarget, поскольку они предполагают, что механизм потокового журнала отображал только поток вывода Trace (не путать с уровнем журнала, называемым «Trace»!)
  • Наконец, я изменил хост.json, чтобы поднять уровень ведения журнала по умолчанию до «Trace». Это необходимо для того, чтобы в окне потоковой передачи отображались выходные данные на уровне трассировки для Microsoft ILogger, и я подумал, что это может быть причиной того, что ни один из выходных данных Nlog не показывался...

    {
     "version": "2.0",
     "logging": {
       "logLevel": {
         "default": "Trace"
        }
      }
    }
    

На данный момент результаты таковы:

  • Все выходные данные средства ведения журнала Майкрософт отображаются как в окне потоковой передачи, так и в журнале Application Insights.
  • Выход Nlog является показан в Application Insights, но НЕТ отображается в окне потоковой передачи.

Вот окончательный код функции...

public static class Function1
{
    [FunctionName("LogTest")]
    public static void Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer, ILogger log)
    {
        // Set up NLOG targets and logger
        var config = new LoggingConfiguration();
        //send logging to application insights     
        config.LoggingRules.Add(
          new LoggingRule("*", LogLevel.Trace, 
          new ApplicationInsightsTarget()));
        //also try to log to Trace output 
        //'RawWrite' is used to try and force output at all log-levels  
        config.LoggingRules.Add(
          new LoggingRule("*", LogLevel.Trace, 
          new TraceTarget {RawWrite = true}));

        LogManager.Configuration = config;
        var nlog = LogManager.GetLogger("Example");

        //log using native
        log.LogInformation($"log:Info"); //appears in live-stream, app-insights
        log.LogError("log:Error");       //appears in live-stream, app-insights
        log.LogTrace("log:Trace");       //appears in live-stream, app-insights (after modifying host.json)

        //log using nlog
        nlog.Info("nlog:info");          //appears in ...........  app-insights
        nlog.Error("nlog:error");        //appears in ...........  app-insights
        nlog.Trace("nlog:trace");        //appears in ...........  app-insights                     

        //say goodbye
        log.LogInformation("log:ending");
    }
}

Заранее спасибо за любые предложения - без сомнения, я пропускаю какой-то простой шаг.

stackoverflow.com/questions/42439564/…
Carlos Alves Jorge 22.05.2019 15:58

Спасибо, Карлос, но, как я уже упоминал в своем посте, я прочитал этот вопрос и ответ и связанный с ним. Оба они относятся к использованию файла конфигурации, тогда как я пытаюсь сделать это с (эквивалентным) программным интерфейсом.

NeilMacMullen 22.05.2019 16:28

Может быть, это может помочь: github.com/NLog/NLog.Extensions.Logging/wiki/…?

Rolf Kristensen 22.05.2019 17:20

Пожалуйста, проверьте github.com/nlog/nlog/wiki/Журналирование-устранение неполадок

Julian 22.05.2019 17:26

Я проверю эти ссылки более подробно позже, но просто повторю... NLog _ правильно ведет журнал в целевом объекте ApplicationInsights с точно такими же правилами, что и TraceTarget. Проблема заключается в том, что выходные данные TraceTarget не попадают в консоль Streamed Log на портале Azure. В этой первой ссылке есть интересный раздел, который показывает, как подключить NLog к экземпляру ILogger, поэтому я попробую это позже.

NeilMacMullen 22.05.2019 17:36
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
5
1 160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря связь, предоставленному Рольфом Кристенсеном
кажется, решение состоит в том, чтобы настроить новое правило, используя MicrosoftILoggerTarget, а не TraceTarget.

Итак, полный код

var config = new LoggingConfiguration();
//ensure that log output is seen in the Streamed Log window
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, 
     new MicrosoftILoggerTarget(azureLog)));
//ensure that log output is sent to Application Insights
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, 
     new ApplicationInsightsTarget()));
LogManager.Configuration = config;
var nlog = LogManager.GetLogger("Example");
nlog.Info("output from nlog");

где azureLog — это ILogger, предоставленный методу Run функции.

MicrosoftILoggerTarget можно найти в пакете nuget NLog.Extensions.Logging.

Счастливый MicrosoftILoggerTarget смог решить вашу проблему :)

Rolf Kristensen 22.05.2019 22:57

Другие вопросы по теме