web-dev-qa-db-ja.com

デバッグでアプリケーションの洞察を無効にする

デバッグ構成を使用している場合にアプリケーションインサイトを自動的に無効にし、リリース時にのみ有効にするにはどうすればよいですか?
デバッグ専用の別のインストルメンテーションキーを作成せずにこれを行うことは可能ですか?

コード全体にtrackeventステートメントが散在しているため、それらをデバッグプリプロセッサチェックで囲むのは理想的なソリューションではありません。

私の現在の解決策は、Build ActionファイルのApplicationInsights.configNoneに設定して、プロジェクトの出力ディレクトリにコピーしないようにすることですが、これはアクティブなビルド構成に基づいて自動化できるプロセスではありません。

開発者モードがありますが、手動で変更する必要があります(構成ファイルを条件付きで設定できた場合、instrumentationkeyが解決した問題も空にします)。 http://apmtips.com/blog/2015/02/02/developer-mode/ を参照してください

リファレンス: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx

83
Alberto Rivelli

<instrumentationkey>key</instrumentationkey>ブロックイベントが生成されない限り、ApplicationInsights.configをデプロイまたはデプロイしないという質問で説明したように。その後、コードにインストルメンテーションキーを配置できます(私の場合はリリース時のみ)

#if !DEBUG
    Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif

この呼び出し後に作成されたすべてのTelemetryClientには正しいキーがあり、イベントを追跡するため、すべての場所でコードを変更する必要はありません。上記のメソッドを呼び出さないか、パラメーターを空のままにすると、キーが構成されていないため、イベントがブロックされます。

基本的に、ApplicationInsights.configファイルは、インストルメンテーションキーを設定するコードをオーバーライドし、その中の<instrumentationkey>key</instrumentationkey>を削除すると、コードを使用してキーを構成できます。 ファイルを完全に削除しても機能しません。

確認は次のとおりです。「キーを動的に設定する場合-たとえば、アプリケーションから別のリソースに結果を送信する場合-構成ファイルからキーを省略し、代わりにコードで設定できます。」

参照: https://Azure.Microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey

20
Alberto Rivelli

TelemetryConfiguration.DisableTelemetry Propertyこのような方法を使用してみてください。

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
63
Abhijit Jana

他のソリューションへの追加として、次のものをGlobal.asaxに追加することをお勧めします。

protected void Application_Start()
{    
    DisableApplicationInsightsOnDebug();
    // do the other stuff
}

/// <summary>
/// Disables the application insights locally.
/// </summary>
[Conditional("DEBUG")]
private static void DisableApplicationInsightsOnDebug()
{
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

この利点は、構成を変更する必要がなく、#- directivesよりも理解しやすいReSharperなどのいくつかのツールでより適切に動作することです。

55

ASP.NET Coreプロジェクトの場合、App Insightsはデフォルトでオンになっており、実際には大量の情報がデバッグウィンドウに記録されます。

無効にするには、[ツール]-> [オプション]-> [プロジェクトとソリューション]-> [Webプロジェクト]に移動し、[Asp.Net Core WebプロジェクトのローカルApplication Insightsを無効にする]をオンにします。

以下は、ローカルアプリの洞察を無効にするための画像です。

Image

この問題の詳細については、公式のgithubの問題を参照してください here

23
Siva Chamarthi

私は両方のアプローチを使用することにしました。 InstrumentationKeyWeb.configに移動しましたが、これはWeb.Release.configまたはWeb.Debug.configからの変換に置き換えられます。 (ApplicationInsights.configファイルから削除することを忘れないでください)。次に、Application_Start()からこのメソッドを呼び出しました

public static void RegisterTelemetryInstrumentationKey()
{
    if (string.IsNullOrWhiteSpace(WebConfigurationManager.AppSettings["TelemetryInstrumentationKey"])
    {
        TelemetryConfiguration.Active.DisableTelemetry = true;
    }
    else
    {
        TelemetryConfiguration.Active.InstrumentationKey = AppSettings.TelemetryInstrumentationKey;
    }
}
12
Sergey

同じ問題が発生しました。

Web.configの設定を制御するため、アプリ設定内にDisableAITelemetryキーを追加しました。

  <appSettings>
    <add key="DisableAITelemetry" value="true" />
  </appSettings>

ライブビルドとデモビルドでは、値を含めません(デフォルトでfalseになります)。

次に、これを追加することで解決できます。

bool disable;
string disableAiTelemetry = ConfigurationManager.AppSettings["DisableAITelemetry"];
bool.TryParse(disableAiTelemetry, out disable);
TelemetryConfiguration.Active.DisableTelemetry = disable;
10
chris31389

ASP.NET Coreアプリケーションでは、以下をStartus.csに追加して、開発環境でApplication Insightsをオフにできます。

if (env.IsDevelopment()) {
    TelemetryConfiguration.Active.DisableTelemetry = true;
}

builder.AddApplicationInsightsSettings();コマンドの直後にこれをコンストラクターに追加すると、AIログがデバッグコンソールを詰まらせることがなくなります。

9
saluce

他のソリューションの一部では、プレイが少し異なります。これをglobal.asaxに追加します。

Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;

デバッガーで実行しているときはアプリの洞察のデバッグ出力をオフにしますが、Ctrl + F5シナリオの下で許可し、テストサーバーに公開されたビルドをデバッグします

7
Josh

Visual Studio 2017(15.9.2)でASP.NET Core 2.1 Webアプリケーションを実行すると、「Asp.Net Core WebプロジェクトのローカルApplication Insightsを無効にする」でデバッグウィンドウの出力がクリアされませんでした。

ただし、Startup.csのConfigure()に次を追加すると、ジョブが実行されました。

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    TelemetryConfiguration.Active.DisableTelemetry = true;
    TelemetryDebugWriter.IsTracingDisabled = true;
}

IsTracingDisabledが重要なソリューションであったことに注意してください、しかし、私はDisableTelemetryに適切な測定のために残しました!さらに、同じソリューション内の.NET Frameworkプロジェクトと.NET Coreプロジェクト間で同様の参照を検索する場合は、両方の行を隣り合わせにすると便利です。

7
alv

デバッグログへのトレースを防ぐ最も簡単な方法は、次のように簡単であることがわかりました。

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
5
Peter Jarrett

Microsoft.ApplicationInsights.AspNetCoreバージョン2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});
3
JJS
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            #region Disable Application Insights debug informations
#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
            TelemetryDebugWriter.IsTracingDisabled = true;
#endif
            #endregion
//...
}
1
SZL