Как можно, чтобы выходные данные NLog отображались в журналах потоковой передачи для функции Azure? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть простая функция 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, поскольку они предлагают что механизм потокового журнала отображает только выходной поток трассировки (не путать с уровнем журнала, называемым «трассировка»!)
  • Наконец, я изменил host.json , чтобы повысить уровень ведения журнала по умолчанию до «Trace». Это необходимо для того, чтобы потоковое окно показывало выходные данные уровня трассировки для Microsoft ILogger, и я подумал, что это может быть причиной того, что ни один из выходных данных Nlog не показывал ...

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

Пока что результаты таковы:

  • Все выходные данные журнала Microsoft отображаются в окне потоковой передачи и журнале Application Insights.
  • Выход Nlog равен , показанному в Application Insights, но NOT отображается в окне потоковой передачи.

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

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");
    }
}

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

1 Ответ

4 голосов
/ 22 мая 2019

Благодаря ссылке , предоставленной Рольфом Кристенсеном
, кажется, что решение состоит в том, чтобы настроить новое правило, используя 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.

...