web-dev-qa-db-ja.com

Application Insightsを使用したLog4Net

Log4netトレースをAzure Application Insightsに送信するようにAzure asp.net Webサイトを構成しようとしています。 Azureコンソールのページビューなどで確認できるので、問題なく動作していることがわかります。また、ファイルハンドラーを使用して構成された場合、log4netトレースを表示できますが、アプリケーションインサイトハンドラーを使用するようにlog4netを構成すると、アプリケーションインサイトダッシュボードにlog4netエントリが表示されず、ビルドまたは実行時にエラーまたは警告が表示されません-ただダッシュボードに結果はありません。 Fiddlerでネットワークトラフィックを確認しましたが、ページビューデータなどがアプリケーションインサイトに送信されているのを確認できましたが、log4netトレーストラフィックは確認できなかったため、これは構成の問題であると思われます。

別に、メインプロジェクトでTelemetryClient()を試してみましたが、ダッシュボードにトレーストラフィックが正常に表示されています。ただし、TelemetryClientはまだasp.net以外のdllをサポートしていないようです(つまり、別個のdllにあるビジネスとデータロジック)。

誰でも洞察やアドバイスを提供していますか?

Microsoft.ApplicationInsights.Log4NetAppender.dllのnugetパッケージをインストールし、Microsoft.ApplicationInsights.0.13.2-build00132を使用しています

https://blog.ehn.nu/2014/11/using-log4net-for-application-insights/ に従ってweb.configに次のものがあります

<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>
26
BMac

Log4Net Appender のPreReleaseバージョンをインストールしてみてください。

私は他の誰かが作成した手順 に従ってASP.NET MVCの標準的な例を作成しましたが 、上記と同じ問題がありました。しかし、その後、Application Insightsのドキュメントに記載されたいくつかの手順 に従って 、log4netアペンダーのPreReleaseパッケージのインストールが指定されていることを発見しました。それがうまくいったことをやった:)

4
Phil

また、Log4NetログをSitecore WebサイトのAIに送信する際に問題が発生しました。 SitecoreにはLog4Netの独自の実装があるため、AI Nugetパッケージでは機能しませんでした。ログをAIに送信する独自​​のApprenderを作成しました。

 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>
2
Robin B

Log4netの構成は正しいです。私はテストWebサイトでそれを使用しましたが、うまくいきました。また、Fiddlerには他のAIデータが表示されているため、AIも適切に構成されています。そのような場合に探すべきことの1つは、log4net.Config.XmlConfigurator属性です。これはアセンブリレベルの属性であり、log4net構成を適切に読み取るために必要な場合があります。

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

プロジェクトで指定されていることを確認して、もう一度試してください。

2
tokaplan

私の場合(既存のWebアプリケーションに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>
  ...
2
Vladislav