web-dev-qa-db-ja.com

ApplicationInsights-ログの例外

私は自分のアプリでApplicationInsightsのカスタムロガーを作成しました。 AzurePortalでAppInsightsを表示しても、例外やイベントは表示されません。これがロガークラスコードです。コードをデバッグすると、InstrumentationKeyプロパティに割り当てられたキーが表示されますが、ここで間違っていることはありますか?クライアントまたは構成に他の情報を添付する必要がありますか?

public class AppInsightsLogger:ILogger
{
    private TelemetryClient ai;

    public AppInsightsLogger()
    {
        ai = new TelemetryClient();
        if (string.IsNullOrEmpty(ai.InstrumentationKey))
        {
            // attempt to load instrumentation key from app settings
            var appSettingsTiKey = AppSettings.InsightsKey;
            if (!string.IsNullOrEmpty(appSettingsTiKey))
            {
                TelemetryConfiguration.Active.InstrumentationKey = appSettingsTiKey;
                ai.InstrumentationKey = appSettingsTiKey;
            }
            else
            {
                throw new Exception("Could not find instrumentation key for Application Insights");
            }
        }
    }
    public void LogException(Exception ex)
    {
        ai.TrackException(ex);
    }
}
9
TheWebGuy

新しいコンソールアプリケーションを作成し、最新の安定したApplicationInsights SDKをインストールして、例をほぼ維持しましたが、マイナーですが重要な違いがあります。TrackExceptionを呼び出した後、シャットダウンする前に待機するか、TelemetryClient.Flush()を追加しました。

namespace logtest
{
    class Program
    {
        static void Main(string[] args)
        {
            AppInsightsLogger logger = new AppInsightsLogger();
            logger.LogException(new InvalidOperationException("Is data showing?"));

            // either wait for a couple of minutes for the batch to be sent of add ai.Flush() after ai.TrackException() to send the batch immediately
            Console.ReadLine();
        }
    }

    public class AppInsightsLogger
    {
        private TelemetryClient ai;

        public AppInsightsLogger()
        {
            ai = new TelemetryClient();
            if (string.IsNullOrEmpty(ai.InstrumentationKey))
            {
                // attempt to load instrumentation key from app settings
                var appSettingsTiKey = "<ikey>";
                if (!string.IsNullOrEmpty(appSettingsTiKey))
                {
                    TelemetryConfiguration.Active.InstrumentationKey = appSettingsTiKey;
                    ai.InstrumentationKey = appSettingsTiKey;
                }
                else
                {
                    throw new Exception("Could not find instrumentation key for Application Insights");
                }
            }
        }
        public void LogException(Exception ex)
        {
            ai.TrackException(ex);
            // ai.Flush();
        }
    }
}

最初に、Visual Studioのデバッグ出力ウィンドウで送信されたテレメトリアイテムを確認できました: enter image description here

次に、テレメトリがFiddlerにあるマシンを離れるのを見ることができました。また、データ収集エンドポイントによって正常に受け入れられたのもわかりました。 enter image description here

そして最後に、ポータルでそれを見ることができました:

enter image description here

10
Alex Bulankou

今日、質問と受け入れられた答えは時代遅れです。現代的なアプローチは、すぐにログに記録できるMicrosoft.ApplicationInsights.AspNetNuGetパッケージを追加することです。

公式ドキュメント を参照してください。

ドキュメントからの要点:

  1. ApplicationInsightsLoggerProviderはデフォルトで有効になっています。
  2. キャプチャされたログタイプは、appsettings.jsonで構成できます(または、本当に必要な場合はプログラムで構成できます)
    "Logging": {
        "LogLevel": {
            "Default": "Warning"
        },
        "ApplicationInsights": {
            "LogLevel": {
                "Default": "Error"
            }
        }
    }
1
Alex Klaus