Tắt thông tin chi tiết về ứng dụng trong gỡ lỗi


99

Làm cách nào để tôi có thể tự động tắt thông tin chi tiết về ứng dụng khi sử dụng cấu hình gỡ lỗi và chỉ bật khi phát hành?
Có thể làm điều này mà không cần tạo một khóa thiết bị khác chỉ để gỡ lỗi không?

Tôi có các trackeventcâu lệnh nằm rải rác trên toàn bộ mã, việc đặt chúng bên trong kiểm tra bộ xử lý trước gỡ lỗi không phải là giải pháp lý tưởng.

Giải pháp hiện tại của tôi là để thiết lập Build Actioncác ApplicationInsights.configtập tin để Nonesao cho nó không được sao chép vào thư mục đầu ra của dự án, nhưng đây không phải là một quá trình có thể được tự động dựa trên việc xây dựng cấu hình hoạt động.

Có Chế độ dành cho nhà phát triển nhưng cần phải được thay đổi theo cách thủ công (nếu có thể đặt tệp cấu hình có điều kiện, đồng thời làm trống vấn đề đã giải quyết phím thiết bị). Xem http://apmtips.com/blog/2015/02/02/developer-mode/

Tham khảo: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-enosystem-stamps-and-app-versions.aspx

Câu trả lời:


69

Bạn có thể thử sử dụng Thuộc tính TelemetryConfiguration.DisableTelemetry Tương tự như cách này ..

#if DEBUG
            TelemetryConfiguration.Active.DisableTelemetry = true;
#endif

Tôi đã thử thêm câu lệnh này ngay trước đó WindowsAppInitializer.InitializeAsync();(tôi cũng đã thử sau nó) nhưng bộ đếm sự kiện thông tin chi tiết của ứng dụng visual studio đã tăng lên. Tôi không thể biết liệu phiên này có được ghi lại một cách hiệu quả trong cổng thông tin không vì có quá nhiều phiên và người dùng. Tôi sẽ cố gắng trong đêm.
Alberto Rivelli

Alberto, tôi đã kiểm tra như thế này - 'mã' công khai lớp kín một phần MainPage: Page {TelemetryClient telemetry; public MainPage () {this.InitializeComponent (); #if DEBUG TelemetryConfiguration.Active.DisableTelemetry = true; #endif telemetry = new TelemetryClient (); } private void button_Click (object sender, RoutedEventArgs e) {telemetry.TrackEvent ("Event Custom"); } 'code' .. và dường như đang hoạt động. tôi cũng sẽ thử một số trang khác. sẽ cập nhật cho bạn
Abhijit Jana

Ngoài ra, từ chính Visual Studio, bạn có thể kiểm tra xem các sự kiện đo từ xa có được gửi hay không. Tôi vừa đăng bài này vào cuối năm Cách nhận số lượng sự kiện Thông tin chi tiết về ứng dụng từ Visual Studio 2015
Abhijit Jana

Đó là những gì tôi đã viết, bộ đếm sự kiện studio trực quan tăng lên.
Alberto Rivelli

2
Ngay cả khi DisableTelemetry được đặt thành true và khóa thiết bị trống, các mô-đun đo từ xa sẽ tiếp tục thu thập dữ liệu. Dữ liệu sẽ không được gửi đi, nhưng nó sẽ được thu thập. Xem sự cố này được ghi lại trên App Insights: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 Nếu bạn muốn tắt đầu ra đầu tiên, bạn có thể làm theo các bước được tìm thấy tại github.com/Microsoft/ApplicationInsights-dotnet/issues/310
Guillaume LaHaye

61

Để bổ sung cho các giải pháp khác, tôi sẽ đề xuất thêm các giải pháp sau, giả sử 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;
}

Ưu điểm của điều này là nó không cần thay đổi cấu hình và nó hoạt động tốt hơn với một số công cụ như ReSharper sẽ hiểu nó tốt hơn #-directives.


1
Chúng tôi thường triển khai cấu hình DEBUG cho cấu hình staging và RELEASE cho sản xuất. Cả hai đều có thể được kích hoạt đo từ xa RIÊNG. Vì vậy, thay đổi của bạn sẽ vô hiệu hóa tính năng đo từ xa cho môi trường dàn dựng.
Sergey G.

1
@Sergey Tôi khuyên bạn nên xác định một cấu hình đơn và xác định một biến STAGING ở đó. Vì vậy, bạn có thể phân biệt rõ hơn giữa gỡ lỗi cục bộ. Một tùy chọn khác sẽ là xác định một biểu tượng mới LOCAL và thay thế nó trong-thuộc tính Conditional.
Alexander Schmidt

thông thường, chúng tôi có các chuỗi kết nối DB khác nhau, tài khoản lưu trữ và các cài đặt khác cho STAG và PROD (như id ứng dụng FB, tài khoản SendGrid, cài đặt ứng dụng, v.v.). Hơn nữa - cục bộ, chúng tôi có trình mô phỏng lưu trữ Azure và SQL Express cục bộ. Vì vậy, không có cách nào để làm việc với một cấu hình duy nhất. Chúng tôi cần 3 cấu hình khác nhau và cấu hình cục bộ phải có chức năng đo từ xa bị vô hiệu hóa.
Sergey G.

Bạn vẫn có thể xác định một biểu tượng tùy chỉnh trên nhiều cấu hình của mình. Sau đó, thay vì sử dụng Điều kiện ("GỬI"), bạn có thể sử dụng Điều kiện ("WHATEVER"). Ngoài ra, bạn có thể lấy một giá trị từ appSettings và sử dụng các phép biến đổi để thổi bay nó trong các môi trường không cục bộ.
joelmdev

34

Đối với các dự án ASP.NET Core, Thông tin chi tiết về ứng dụng được BẬT theo mặc định, điều này thực sự ghi rất nhiều thông tin vào cửa sổ gỡ lỗi.

Để vô hiệu hóa nó, hãy đi tới "TOOLS -> Options -> Projects and Solutions -> Web Projects" và chọn "Disable Local Application Insights for Asp.Net Core web project".

Dưới đây là hình ảnh để tắt thông tin chi tiết về ứng dụng cục bộ.

Hình ảnh

Để biết thêm thông tin về vấn đề này, bạn có thể xem vấn đề github chính thức tại đây


22

Như đã giải thích trong câu hỏi không triển khai hoặc triển khai ApplicationInsights.config mà không <instrumentationkey>key</instrumentationkey>tạo các sự kiện khối. Sau đó, bạn có thể đặt khóa thiết bị trong mã (chỉ khi phát hành trong trường hợp của tôi)

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

Mọi TelemetryClientđược tạo sau cuộc gọi này sẽ có khóa chính xác và sẽ theo dõi các sự kiện để bạn không phải thay đổi mã ở mọi nơi. Không gọi phương thức trên hoặc để trống tham số sẽ chặn các sự kiện vì không có khóa được định cấu hình.

Về cơ bản, ApplicationInsights.configtệp sẽ ghi đè bất kỳ mã nào đặt khóa thiết bị đo, xóa phần <instrumentationkey>key</instrumentationkey>bên trong nó sẽ cho phép bạn sử dụng mã để định cấu hình khóa. Nếu bạn xóa tệp hoàn toàn, nó không hoạt động.

Đây là xác nhận: "Nếu bạn muốn đặt khóa động - ví dụ: nếu bạn muốn gửi kết quả từ ứng dụng của mình đến các tài nguyên khác nhau - bạn có thể bỏ qua khóa khỏi tệp cấu hình và thay vào đó đặt khóa bằng mã."

Tham khảo: https://azure.microsoft.com/en-us/documentation/articles/app-insights-configuration-with-applicationinsights-config/#_instrumentationkey


1
Xem blog này cách sử dụng cái này với một cái riêngApplicationInsights.Debug/Release.config
Yahoo Serious

16

Tôi đã quyết định sử dụng cả hai cách tiếp cận. Tôi đã chuyển InstrumentationKeysang Web.configvà nó sẽ được thay thế bằng chuyển đổi từ Web.Release.confighoặc Web.Debug.config. (đừng quên xóa nó khỏi ApplicationInsights.configtệp). Sau đó, tôi đã gọi phương thức này từApplication_Start()

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

điều này đã lỗi thời ngày nay, làm thế nào để chúng ta làm điều này ngày nay đúng cách?
l --''''''--------- '' '' '' '' '' ''

15

Chạy ứng dụng web ASP.NET Core 2.1 với Visual Studio 2017 (15.9.2), "Tắt thông tin chi tiết ứng dụng cục bộ cho các dự án web Asp.Net Core" không xóa kết quả đầu ra trong cửa sổ Gỡ lỗi của tôi.

Tuy nhiên, thêm phần sau vào Configure () trong Startup.cs đã thực hiện được công việc;

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

Lưu ý rằng IsTracingDisabled là giải pháp quan trọng , nhưng tôi đã bỏ qua DisableTelemetry để có biện pháp tốt! Ngoài ra, việc đặt cả hai dòng bên cạnh nhau sẽ rất hữu ích khi tìm kiếm các tham chiếu tương tự giữa các dự án .NET Framework & .NET Core trong cùng một giải pháp.


2
điều này đã lỗi thời ngày nay, làm thế nào để chúng ta làm điều này ngày nay đúng cách?
l --''''''--------- '' '' '' '' '' ''

11

Tôi vừa gặp vấn đề tương tự.

Chúng tôi muốn kiểm soát cài đặt trong web.config nên đã thêm khóa DisableAITelemetry trong cài đặt ứng dụng của chúng tôi:

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

Với các bản dựng trực tiếp và bản demo, chúng tôi sẽ không bao gồm một giá trị (để nó mặc định là false).

Sau đó, chúng tôi có thể giải quyết nó bằng cách thêm điều này:

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

10

Cách chơi hơi khác trên một số giải pháp khác. Đặt cái này vào global.asax của bạn:

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

Nó sẽ tắt đầu ra gỡ lỗi thông tin chi tiết về ứng dụng khi chạy trong trình gỡ lỗi, nhưng cho phép nó trong các kịch bản Ctrl + F5 và bản dựng gỡ lỗi được xuất bản cho máy chủ thử nghiệm


10

Trong ứng dụng ASP.NET Core, bạn có thể thêm phần sau vào Startus.cs để tắt Thông tin chi tiết về ứng dụng trong môi trường Phát triển:

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

Thêm điều này vào hàm tạo, ngay sau builder.AddApplicationInsightsSettings();lệnh và bạn sẽ không còn thấy nhật ký AI làm tắc nghẽn bảng điều khiển gỡ lỗi của bạn.


Không ... không tạo ra sự khác biệt nào đối với tôi (với ASP.Net Core 2.1). Vẫn nhận được một núi thông báo "Phép đo từ xa của Application Insights" trong cửa sổ Output.
Mike Gledhill

7

Chúng tôi đã tìm thấy cách dễ nhất để ngăn nó theo dõi vào Nhật ký gỡ lỗi là đơn giản như:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore Phiên bản 2.1

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

Đây có phải là giả để ẩn Application Insights Telemetry (unconfigured)tin nhắn từ bảng điều khiển gỡ lỗi trong Visual Studio - bởi vì nếu có thì nó dường như không làm việc :-(
Simon_Weaver

3
Tôi không chắc loại tin nhắn đó là gì. Tôi tin rằng bạn đang tìm TelemetryDebugWriter.IsTracingDisabled = true;cách xóa chúng.
JJS

3
         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
điều này đã lỗi thời ngày nay, làm thế nào để chúng ta làm điều này ngày nay đúng cách?
l --''''''--------- '' '' '' '' '' ''

0

Kể từ .NET Core 3.1:

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.DisableTelemetry = true;

var telemetryClient = new TelemetryClient(telemetryConfiguration);   // Use this instance
TelemetryDebugWriter.IsTracingDisabled = true;

1
Dưới đây là tài liệu để thực hiện việc này, bao gồm cả việc lấy Cấu
Noah Stahl

0

Kể từ ASP.NET Core 3.1:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
}
TelemetryDebugWriter.IsTracingDisabled = true;

(phần trên có thể được gọi từ mọi nơi, nhưng càng sớm trong vòng đời ứng dụng của bạn thì càng tốt).

Cả hai có thể được sử dụng cùng nhau để ngăn chặn tất cả hoạt động Thông tin chi tiết về ứng dụng trong mã của bạn. Tôi bảo vệ bằng một #if DEBUGchỉ thị để đảm bảo rằng AppInsights không làm gì trên máy cục bộ của tôi, nhưng phát ra các sự kiện khi được tải lên máy chủ nhà phát triển Azure của chúng tôi:

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
    TelemetryConfiguration configuration)
{
    if (app.IsDevelopment())
    {
#if DEBUG
        configuration.DisableTelemetry = true;

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.