Log4Net с Application Insights

Я пытаюсь настроить свой веб-сайт azure asp.net для отправки трассировки log4net в Azure Application Insights. Я могу видеть в моей лазурной консоли просмотры страниц и т. Д., Поэтому я знаю, что все работает нормально. Я также могу видеть следы log4net, когда настроен с помощью обработчика файлов, но при настройке log4net для использования обработчика аналитических данных приложения я не вижу никаких записей log4net, появляющихся на панели мониторинга приложения, никаких ошибок или предупреждений во время сборки или выполнения - просто нет результатов на панели инструментов. Я просмотрел сетевой трафик в Fiddler, и я вижу, что данные о просмотрах страниц и т. Д. Отправляются в аналитические данные приложения, но не трафик трассировки log4net, поэтому я подозреваю, что это проблема конфигурации.

Отдельно я попробовал TelemetryClient () в своем основном проекте и успешно вижу трассировку трафика на панели инструментов. Однако это не соответствует моему варианту использования, поскольку TelemetryClient, похоже, пока не поддерживает dll, отличные от asp.net (т.е. мою бизнес-логику и логику данных, которые находятся в отдельных dll).

Кто-нибудь предлагает какие-либо идеи или советы?

Я установил пакет nuget для Microsoft.ApplicationInsights.Log4NetAppender.dll и использую Microsoft.ApplicationInsights.0.13.2-build00132

В моем файле web.config указано следующее: https://blog.ehn.nu/2014/11/using-log4net-for-application-insights/

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <level value="ALL"/>
      <appender-ref ref="aiAppender"/>
    </root>
    <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message%newline"/>
      </layout>
    </appender>
  </log4net>
<configuration>

person BMac    schedule 01.03.2015    source источник
comment
Здравствуйте, у меня такая же проблема ... Вы уже нашли решение? Спасибо...   -  person bob    schedule 26.03.2015
comment
@bob нет, пока нет. Я связался с командой MS, но отзывов пока нет.   -  person BMac    schedule 26.03.2015
comment
У меня точно такая же проблема. Я вижу неперехваченные исключения, зарегистрированные в Application Insights, но не отслеживаю log4net, даже если это нормально отображается в файловом приложении. Вы когда-нибудь находили для этого причину?   -  person Phil    schedule 06.05.2015
comment
привет @Phil, к сожалению, нет. Я припарковал это на данный момент, так как мой текущий проект еще через несколько месяцев не готов к работе - хотя я планирую вернуться к нему до моей даты выхода в эфир. Обязательно обновлюсь, если когда-нибудь получу исправление.   -  person BMac    schedule 06.05.2015
comment
Спасибо, что ответили на @Macb. Я попытался создать канонический пример, следуя тому, что кто-то вел блог, но он все равно не работает. Я оставил комментарий к тому блогу, ловящему любые подсказки, и вернусь с любыми идеями (простите за каламбур), которые придумаю.   -  person Phil    schedule 07.05.2015
comment
@Macb Я наткнулся на возможное решение и опубликовал ответ - скрестив пальцы, это тоже помогает!   -  person Phil    schedule 07.05.2015
comment
Я прохожу код в Reflector. У меня он еще не работает полностью, но я добился некоторого прогресса. В атрибуте type элемента appender попробуйте ApplicationInsights.Log4Net.InsightsAppender, ApplicationInsights.Log4Net, Version = 38.0.0.0, Culture = нейтральный, PublicKeyToken = null или любое другое имя AssemblyQualifiedName для вашей библиотеки DLL. полное имя сборки и полное имя сборки различаются, и я сначала не заметил эту разницу. Если тип приложения отсутствует в DLL log4net, я думаю, ему нужно квалифицированное имя сборки.   -  person MindModel    schedule 01.03.2016


Ответы (4)


Попробуйте установить предварительную версию Log4Net Appender.

Я создал канонический пример ASP.NET MVC, выполнив шаги был создан кем-то другим и имел ту же проблему, что и выше. Но затем выполнил несколько шагов, написанных в Application Insights документации и обнаружил, что те, кто указали, устанавливают пакет PreRelease для приложения log4net. После этого все заработало :)

person Phil    schedule 07.05.2015
comment
Thakns @Phil Я обязательно попробую и дам тебе знать. - person BMac; 07.05.2015
comment
@Phil Я пытаюсь сделать то же самое, и у меня есть исключения из журнала APp Insights, количество запросов и т. Д., Но я нигде не вижу свои сообщения Log.Info (). Какие-либо предложения? - person awj; 19.02.2016
comment
Извините, @awj, но я вообще не смотрю на свою интеграцию с Application Insights в данный момент, и моя рабочая нагрузка означает, что я тоже не собираюсь это делать какое-то время. - person Phil; 20.02.2016

У меня также были некоторые проблемы с отправкой моих журналов Log4Net в AI на веб-сайте Sitecore. Sitecore имеет собственную реализацию Log4Net, поэтому она не работала с пакетом AI Nuget. Я сделал свой собственный Apprender, в котором отправляю логи в AI.

 public class CustomLogFileAppender : SitecoreLogFileAppender
    {
        protected override void Append(LoggingEvent loggingEvent)
        {
            if (Sitecore.Context.Site != null )
            {

                if(loggingEvent.Level == Level.FATAL)
                {
                    AppsInsightsLogHelper.Critical(loggingEvent.RenderedMessage);
                }

                if (loggingEvent.Level == Level.ERROR)
                {
                    AppsInsightsLogHelper.Error(loggingEvent.RenderedMessage);
                }

                if (loggingEvent.Level == Level.WARN)
                {
                    AppsInsightsLogHelper.Warning(loggingEvent.RenderedMessage);
                }

                if(loggingEvent.Level == Level.INFO)
                {
                    AppsInsightsLogHelper.Info(loggingEvent.RenderedMessage);
                }


            }

                base.Append(loggingEvent);
        }
    }

В sitecore.config:

<log4net>
    <appender name="LogFileAppender" type="namespace.CustomLogFileAppender, dll name">
      ...
    </appender>
</log4net>
person Robin B    schedule 24.05.2016
comment
Привет, Робин, я также сделал свой собственный аппендер, но почему-то некоторые исключения не отображаются на портале AI. Сталкивались ли вы с подобными проблемами? - person EricImhauser; 03.09.2019

Ваша конфигурация log4net верна; Я использовал его на тестовом веб-сайте, и он сработал. Кроме того, поскольку вы видите другие данные AI в Fiddler, ваш AI также настроен правильно. В таких случаях нужно искать атрибут log4net.Config.XmlConfigurator. Это атрибут уровня сборки, и он может потребоваться для правильного чтения конфигурации log4net.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Не могли бы вы убедиться, что он указан в вашем проекте, и попробовать еще раз?

person tokaplan    schedule 30.03.2015
comment
спасибо @tokaplan, я попробую сегодня вечером и отвечу в любом случае, это определенно звучит правдоподобно. - person BMac; 31.03.2015
comment
к сожалению, это, похоже, не имело никакого значения, по-прежнему нет трафика событий, отображаемого на исходящем сервере при просмотре через скрипач, и, следовательно, ничего на приборной панели. Думаю, я начну с первых принципов. - person BMac; 31.03.2015

В моем случае (я добавил Application Insights в существующее веб-приложение) помимо Microsoft.ApplicationInsights.Log4NetAppender мне пришлось добавить Microsoft.ApplicationInsights.Web пакет с помощью NuGet. После этого в созданном ApplicationInsights.config вам нужно указать свой InstrumentationKey.

Например. ApplicationInsights.config

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <InstrumentationKey>YOUR KEY HERE</InstrumentationKey>
  <TelemetryModules>
  ...
person Vladislav    schedule 05.11.2015
comment
вы добавляли модули телеметрии? - person Enrico; 04.03.2021
comment
Насколько я помню, прописались стандартные модули (типа RequestTrackingTelemetryModule и ExceptionTrackingTelemetryModule) - person Vladislav; 09.03.2021