Как сделать так, чтобы выходные данные 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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