Консольное приложение с использованием NLog и MicrosoftApplicationInsights.NLogTarget - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть следующий файл NLog.config для моего консольного приложения на основе .NET.

<targets>

  <target xsi:type="File" name="file" fileName="${basedir}/logs/${shortdate}.log"
        layout="${longdate} ${uppercase:${level}} ${message}" />

  <target xsi:type="Console" name="console" 
        layout="${longdate}|${uppercase:${level}}|${message}" />

</targets>

<rules>
  <!-- add your logging rules here -->
  <logger name="*" minlevel="Debug" writeTo="file" />
  <logger name="*" minlevel="Debug" writeTo="console" />
</rules>

Я следовал инструкциям в других местах и ​​установил Microsoft.ApplicationInsights.Web, и все работает, как ожидалось, например,

var client = new TelemetryClient();

// logging a custom event using the AI API
client.TrackEvent("AppInsights is now ready for logging");
client.Flush();

Это работает вместе с выводом NLog в файл и консоль.Однако, как только я добавляю Microsoft.ApplicationInsights.NLogTarget, все выходные данные консоли NLog и выходные данные файлов исчезают и не отображаются в Application Insights.

Есть идеи?Я пробовал разные настройки в моем NLog.config, устанавливая цели для Application Insights, ничего, что я делаю, не имеет никакого значения.

1 Ответ

0 голосов
/ 21 февраля 2019

После некоторых исследований и помощи я могу разобраться в этой проблеме: данные могут быть отображены в обзоре консоли / файла / приложения.

  1. Вам необходимо объединить nlog.config сapp.config (после установки пакета Microsoft.ApplicationInsights.NLogTarget).После слияния с app.config вы можете удалить nlog.config или просто оставить его там.

  2. Вы должны установить ключ инструмента в приложении следующим образом: TelemetryConfiguration.Active.InstrumentationKey = "xxxx";

код, подобный приведенному ниже:

    private static Logger logger = LogManager.GetCurrentClassLogger();
    static void Main(string[] args)
    {  
        var client = new TelemetryClient();
        TelemetryConfiguration.Active.InstrumentationKey = "xxxxxxxxxx";

        client.TrackEvent("0222: app insights now sending a custom event xxxxxx");
        logger.Trace("0222 Nlog :this is a trace message xxxxxx");
        logger.Debug("0222 Nlog: this is a debug message xxxxxx");
        logger.Info("0222 Nlog: this is a info message xxxxxx");

        Console.ReadLine();
    }

Слияние nlog.config с app.config (после установки пакета Microsoft.ApplicationInsights.NLogTarget), поэтому новый app.config выглядиткак показано ниже (и затем вы можете удалить nlog.config или просто оставить его там):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
    </startup>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

    <!-- optional, add some variables
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
    <variable name="myvar" value="myvalue"/>
    <!--
  See https://github.com/nlog/nlog/wiki/Configuration-file
  for information on customizing logging rules and outputs.
   -->
    <extensions>
      <add assembly="Microsoft.ApplicationInsights.NLogTarget"/>
    </extensions>
    <targets>
      <target xsi:type="File" name="file" fileName="${basedir}/logs/${shortdate}.log"
          layout="${longdate} ${uppercase:${level}} ${message}" />

      <target xsi:type="Console" name="console"
            layout="${longdate}|${uppercase:${level}}|${message}" />

      <target xsi:type="ApplicationInsightsTarget" name="aiTarget"/>
    </targets>

    <rules>
      <logger name="*" minlevel="Trace" writeTo="file" />
      <logger name="*" minlevel="Trace" writeTo="console" />
      <logger name="*" minlevel="Trace" writeTo="aiTarget"/>
    </rules>

  </nlog>
</configuration>

Запустите ваш проект, вы увидите результаты в консоли и в окне вывода:

enter image description here

Затем перейдите в файл журнала, в котором вы определили, вы можете увидеть, что файл журнала создан и содержит правильные данные.

Наконец, перейдите на портал Azure -> Информация о вашем приложении -> поиск, вы можете видеть, что сообщения там (это может занять несколько минут):

enter image description here

Кстати, как проверитьЕсли сообщение может быть отправлено в приложение Azure Portal Insights:

при запуске проекта в Visual Studio, проверьтеокно вывода:

, если вы видите «Телеметрия Application Insights (не сконфигурировано):», это означает, что клавиша инструмента неверна или установлена ​​неправильно.оно будет отправлено в insights приложения:

enter image description here

, если без 10 * * ненастроенного , то оно может быть отправлено в insights приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...