デバッグ構成を使用している場合にアプリケーションインサイトを自動的に無効にし、リリース時にのみ有効にするにはどうすればよいですか?
デバッグ専用の別のインストルメンテーションキーを作成せずにこれを行うことは可能ですか?
コード全体にtrackevent
ステートメントが散在しているため、それらをデバッグプリプロセッサチェックで囲むのは理想的なソリューションではありません。
私の現在の解決策は、Build Action
ファイルのApplicationInsights.config
をNone
に設定して、プロジェクトの出力ディレクトリにコピーしないようにすることですが、これはアクティブなビルド構成に基づいて自動化できるプロセスではありません。
開発者モードがありますが、手動で変更する必要があります(構成ファイルを条件付きで設定できた場合、instrumentationkeyが解決した問題も空にします)。 http://apmtips.com/blog/2015/02/02/developer-mode/ を参照してください
<instrumentationkey>key</instrumentationkey>
ブロックイベントが生成されない限り、ApplicationInsights.configをデプロイまたはデプロイしないという質問で説明したように。その後、コードにインストルメンテーションキーを配置できます(私の場合はリリース時のみ)
#if !DEBUG
Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = "instrumentation key";
#endif
この呼び出し後に作成されたすべてのTelemetryClient
には正しいキーがあり、イベントを追跡するため、すべての場所でコードを変更する必要はありません。上記のメソッドを呼び出さないか、パラメーターを空のままにすると、キーが構成されていないため、イベントがブロックされます。
基本的に、ApplicationInsights.config
ファイルは、インストルメンテーションキーを設定するコードをオーバーライドし、その中の<instrumentationkey>key</instrumentationkey>
を削除すると、コードを使用してキーを構成できます。 ファイルを完全に削除しても機能しません。
確認は次のとおりです。「キーを動的に設定する場合-たとえば、アプリケーションから別のリソースに結果を送信する場合-構成ファイルからキーを省略し、代わりにコードで設定できます。」
TelemetryConfiguration.DisableTelemetry Propertyこのような方法を使用してみてください。
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
#endif
他のソリューションへの追加として、次のものを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などのいくつかのツールでより適切に動作することです。
ASP.NET Coreプロジェクトの場合、App Insightsはデフォルトでオンになっており、実際には大量の情報がデバッグウィンドウに記録されます。
無効にするには、[ツール]-> [オプション]-> [プロジェクトとソリューション]-> [Webプロジェクト]に移動し、[Asp.Net Core WebプロジェクトのローカルApplication Insightsを無効にする]をオンにします。
以下は、ローカルアプリの洞察を無効にするための画像です。
この問題の詳細については、公式のgithubの問題を参照してください here
私は両方のアプローチを使用することにしました。 InstrumentationKey
をWeb.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;
}
}
同じ問題が発生しました。
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;
ASP.NET Coreアプリケーションでは、以下をStartus.csに追加して、開発環境でApplication Insightsをオフにできます。
if (env.IsDevelopment()) {
TelemetryConfiguration.Active.DisableTelemetry = true;
}
builder.AddApplicationInsightsSettings();
コマンドの直後にこれをコンストラクターに追加すると、AIログがデバッグコンソールを詰まらせることがなくなります。
他のソリューションの一部では、プレイが少し異なります。これをglobal.asaxに追加します。
Microsoft.ApplicationInsights.Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = Debugger.IsAttached;
デバッガーで実行しているときはアプリの洞察のデバッグ出力をオフにしますが、Ctrl + F5シナリオの下で許可し、テストサーバーに公開されたビルドをデバッグします
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プロジェクト間で同様の参照を検索する場合は、両方の行を隣り合わせにすると便利です。
デバッグログへのトレースを防ぐ最も簡単な方法は、次のように簡単であることがわかりました。
Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True
Microsoft.ApplicationInsights.AspNetCoreバージョン2.1
services.AddApplicationInsightsTelemetry(options =>
{
options.EnableDebugLogger = false;
});
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
#region Disable Application Insights debug informations
#if DEBUG
TelemetryConfiguration.Active.DisableTelemetry = true;
TelemetryDebugWriter.IsTracingDisabled = true;
#endif
#endregion
//...
}