c# - net - vs application insights




在調試中禁用應用程序洞察 (8)

如何在使用調試配置時自動禁用應用程序洞察並僅在發佈時啟用它?
是否可以在不創建另一個僅用於調試的檢測鍵的情況下執行此操作?

我有遍布代碼的 trackevent 語句,將它們封裝在調試預處理器檢查中並不是一個理想的解決方案。

我當前的解決方案是將 ApplicationInsights.config 文件的 Build Action 設置為 None 以便它不會復製到項目的輸出目錄,但這不是可以基於活動構建配置自動執行的過程。

有一個開發者模式但需要手動更改(如果可以有條件地設置配置文件,也清空了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.aspxhttp://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-environments-stamps-and-app-versions.aspx


Microsoft.ApplicationInsights.AspNetCore版本2.1

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnableDebugLogger = false;
});

作為對其他解決方案的補充,我建議在 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;
}

這樣做的好處是,它不需要對配置進行任何更改,並且使用像ReSharper這樣的工具可以更好地工作,它會比 # -directives更好地理解它。


其他一些解決方案略有不同。 把它放在你的global.asax中:

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

它將在調試器下運行時關閉應用程序見解調試輸出,但允許它在Ctrl + F5方案下並調試構建發佈到測試服務器


在ASP.NET Core應用程序中,您可以將以下內容添加到Startus.cs以關閉開發環境中的Application Insights:

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

builder.AddApplicationInsightsSettings(); 之後立即將其添加到構造函數中 builder.AddApplicationInsightsSettings(); 命令,你將不再看到AI日誌堵塞你的調試控制台。



我們發現阻止它跟踪調試日誌的最簡單方法就是:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

我決定使用這兩種方法。 我已將 InstrumentationKey 移動到 Web.config ,它將被 Web.Release.configWeb.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;
    }
}

正如在沒有 <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/#_instrumentationkeyhttps://azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey





azure-application-insights