डिबग में एप्लिकेशन अंतर्दृष्टि अक्षम करें


99

डिबग कॉन्फ़िगरेशन का उपयोग करते समय मैं एप्लिकेशन इनसाइट्स को स्वचालित रूप से कैसे अक्षम कर सकता हूं और इसे केवल रिलीज पर सक्षम कर सकता हूं?
क्या केवल डिबग के लिए एक और इंस्ट्रूमेंटेशन कुंजी बनाए बिना ऐसा करना संभव है?

मेरे पास trackeventपूरे कोड में बिखरे हुए बयान हैं, उन्हें डिबग प्रीप्रोसेसर चेक के अंदर घेरना एक आदर्श समाधान नहीं है।

मेरे वर्तमान समाधान स्थापित करने के लिए है Build Actionके ApplicationInsights.configलिए फ़ाइल Noneइतना है कि यह परियोजना के उत्पादन निर्देशिका में प्रतिलिपि नहीं कर रहा है, लेकिन यह एक प्रक्रिया है कि सक्रिय निर्माण विन्यास के आधार पर स्वचालित किया जा सकता है।

एक डेवलपर मोड है, लेकिन इसे मैन्युअल रूप से बदलने की आवश्यकता है (यदि यह कॉन्फ़िगर फ़ाइल को सशर्त रूप से सेट करना संभव था, तो इंस्ट्रूमेंटेशन हल की गई समस्या को भी खाली करना)। Http://apmtips.com/blog/2015/02/02/developer-mode/ देखें

संदर्भ: http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/07/application-insights-support-for-multiple-en परिवेश- stamps-and- app-versions.aspx

जवाबों:


69

आप TelemetryConfiguration.DisableTelemetry Property का उपयोग कुछ इस तरह से करने की कोशिश कर सकते हैं ।

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

मैंने इस कथन को कुछ समय पहले जोड़ने की कोशिश की थी WindowsAppInitializer.InitializeAsync();(मैंने इसके बाद भी कोशिश की) लेकिन दृश्य स्टूडियो अनुप्रयोग अंतर्दृष्टि घटनाओं काउंटर में वृद्धि हुई। मैं यह देखने में सक्षम नहीं था कि क्या यह सत्र एज़्योर पोर्टल में प्रभावी रूप से दर्ज किया गया था क्योंकि बहुत सारे सत्र और उपयोगकर्ता हैं। मैं रात के दौरान कोशिश करूँगा।
अल्बर्टो रिविल्ली

अल्बर्टो, मैंने इस तरह का परीक्षण किया - 'कोड' जनता ने आंशिक वर्ग को सील कर दिया मेनपेज: पेज {टेलीमेट्रीक्लिक टेलीमेट्री; सार्वजनिक MainPage () {this.InitializeComponent (); #if डेबग टेलीमेट्रीऑनफिगरेशन। एक्टिव।डिजनेबल टेलेमेट्री = सच; #endif telemetry = new TelemetryClient (); } निजी शून्य बटन_क्लिक करें (ऑब्जेक्ट प्रेषक, रूटेडएवेंटएरगेज़ ई) {टेलीमेट्री। क्रैकवेंट ("इवेंट कस्टम"); } 'कोड' .. और काम करने लगता है। मैं कुछ अन्य पृष्ठों की भी कोशिश करूंगा। आपको अपडेट रखेगा
अभिजीत जन

इसके अलावा, विज़ुअल स्टूडियो से ही, आप देख सकते हैं कि टेलीमेट्री इवेंट भेजे गए हैं या नहीं। मैंने अभी इस yestarday को पोस्ट किया कि विजुअल स्टूडियो 2015 से एप्लिकेशन इनसाइट्स की घटनाओं की संख्या कैसे प्राप्त करें
अभिजीत जन

यही मैंने लिखा है, दृश्य स्टूडियो घटनाओं के काउंटर में वृद्धि हुई है।
अल्बर्टो रिविल्ली

2
DisableTelemetry के सही और एक खाली इंस्ट्रूमेंटेशन कुंजी के साथ सेट होने पर भी, टेलीमेट्री मॉड्यूल डेटा एकत्र करता रहेगा। डेटा नहीं भेजा जाएगा, लेकिन इसे एकत्र किया जाएगा। App Insights के खिलाफ लॉग इन किया गया यह मुद्दा देखें: github.com/Microsoft/ApplicationInsights-dotnet/issues/397 यदि आप डेब्यू आउटपुट को डिसेबल करना चाहते हैं, तो आप github.com/Microsoft/ApplicationInsights-dotnet/issues/310 पर पाए गए चरणों का पालन कर सकते हैं।
गिलियूम लाहै

61

अन्य समाधानों के अतिरिक्त मैं निम्नलिखित को जोड़ने का सुझाव दूंगा 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 के साथ बेहतर तरीके से काम करता है जो इसे बेहतर- निष्क्रियता से बेहतर समझेगा।


1
हम आम तौर पर स्टेजिंग के लिए DEBUG कॉन्फिगरेशन और उत्पादन के लिए RELEASE कॉन्फिगर करते हैं। इन दोनों में OWN टेलीमेट्री सक्षम हो सकती है। तो आपका परिवर्तन मंचन वातावरण के लिए टेलीमेट्री को अक्षम कर देगा।
सर्गेई जी।

1
@Sergey मैं एक एकल विन्यास को परिभाषित करने और वहाँ एक STAGING चर को परिभाषित करने का सुझाव दूंगा। इस प्रकार आप स्थानीय रूप से डिबगिंग के बीच बेहतर अंतर कर सकते हैं। एक अन्य विकल्प एक नए प्रतीक LOCAL को परिभाषित करना और इसे Conditional-attribute में बदलना होगा ।
अलेक्जेंडर श्मिट

आमतौर पर हमारे पास अलग-अलग DB कनेक्शन स्ट्रिंग्स, स्टोरेज अकाउंट्स और STAG और PROD के लिए अन्य सेटिंग्स (जैसे FB ऐप आईडी, सेंडग्रिड अकाउंट, ऐप सेटिंग्स आदि) हैं। इसके अलावा - स्थानीय रूप से हमारे पास एज़्योर स्टोरेज एमुलेटर और लोकल एसक्यूएल एक्सप्रेस है। इसलिए एकल कॉन्फ़िगरेशन के साथ काम करने का कोई तरीका नहीं है। हमें 3 अलग-अलग कॉन्फ़िगरेशन की आवश्यकता है और स्थानीय में एक अक्षम टेलीमेट्री होनी चाहिए।
सर्गेई जी।

आप अभी भी अपने एक से अधिक विन्यास पर एक कस्टम प्रतीक को परिभाषित कर सकते हैं। तब Conditional ("DEBUG") का उपयोग करने के बजाय, आप सशर्त ("WHATEVER") कर सकते थे। वैकल्पिक रूप से आप appSettings से एक मूल्य हड़पने और गैर स्थानीय वातावरण में इसे दूर उड़ाने के लिए परिवर्तनों का उपयोग कर सकते हैं।
joelmdev

34

ASP.NET कोर परियोजनाओं के लिए ऐप इनसाइट डिफ़ॉल्ट रूप से चालू हैं, जो वास्तव में एक टन जानकारी को डिबग विंडो में लॉग करता है।

इसे अक्षम करने के लिए "टूल्स -> विकल्प -> प्रोजेक्ट्स एंड सॉल्यूशंस -> वेब प्रोजेक्ट्स" पर जाएं और "एस्पेनेट कोर वेब प्रोजेक्ट्स के लिए स्थानीय एप्लिकेशन इनसाइट्स अक्षम करें" देखें।

नीचे स्थानीय एप्लिकेशन अंतर्दृष्टि अक्षम करने के लिए छवि है।

छवि

समस्या के बारे में अधिक जानकारी के लिए आप यहाँ आधिकारिक गितुब मुद्दा देख सकते हैं


22

जैसा कि इस सवाल में बताया गया है कि एक ApplicationInsights.config को तैनात या तैनात नहीं <instrumentationkey>key</instrumentationkey>किया जा सकता है, बिना उत्पन्न होने वाली घटनाओं के। आप कोड में इंस्ट्रूमेंटेशन कुंजी डाल सकते हैं (केवल मेरे मामले में रिलीज होने पर)

#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


1
इस ब्लॉग को एक अलग से उपयोग करने का तरीका देखेंApplicationInsights.Debug/Release.config
याहू सीरियस

16

मैंने दोनों दृष्टिकोणों का उपयोग करने का निर्णय लिया है। मैं इसे स्थानांतरित कर 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;
    }
}

यह आज अप्रचलित है, हम आज कैसे ठीक से करते हैं?
l

15

Visual Studio 2017 (15.9.2) के साथ ASP.NET Core 2.1 वेब एप्लिकेशन को चलाने से "Asp.Net कोर वेब प्रोजेक्ट्स के लिए स्थानीय एप्लिकेशन इनसाइट्स अक्षम करें" ने मेरी डिबग विंडो में आउटपुट को स्पष्ट नहीं किया।

हालाँकि Startup.cs में निम्नलिखित को कॉन्फ़िगर करने () में शामिल करने का काम किया;

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

ध्यान दें कि IsTracingDisabled प्रमुख समाधान था , लेकिन मैंने अच्छे उपाय के लिए DisableTelemetry में छोड़ दिया! प्लस एक ही समाधान में .NET फ्रेमवर्क और .NET कोर परियोजनाओं के बीच समान संदर्भों की खोज करते समय एक दूसरे के बगल में दोनों लाइनें होने में मददगार है।


2
यह आज अप्रचलित है, हम आज कैसे ठीक से करते हैं?
l

11

मैं सिर्फ एक ही मुद्दा था।

हम web.config में सेटिंग को नियंत्रित करना चाहते थे, इसलिए हमारी एप्लिकेशन सेटिंग में DisableAITelemetry कुंजी जोड़ी गई:

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

लाइव और डेमो बिल्ड के साथ, हम एक मान शामिल नहीं करेंगे (ताकि यह झूठे के लिए चूक हो)।

हम इसे जोड़कर इसे हल कर सकते हैं:

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

10

कुछ अन्य समाधानों पर थोड़ा अलग खेलते हैं। इसे अपने Global.asax में डालें:

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

डीबगर के तहत चलने पर यह ऐप इनसाइट्स डिबग आउटपुट को बंद कर देगा, लेकिन इसे Ctrl + F5 परिदृश्यों के तहत अनुमति दें और टेस्ट सर्वर पर प्रकाशित डीबग बनाता है


10

ASP.NET कोर अनुप्रयोग में, आप विकास परिवेश में अनुप्रयोग अंतर्दृष्टि बंद करने के लिए निम्नलिखित को Startus.cs में जोड़ सकते हैं:

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

builder.AddApplicationInsightsSettings();कमांड के ठीक बाद, इसे कंस्ट्रक्टर में जोड़ें और आप अपने डिबग कंसोल को बंद करके AI लॉग नहीं देखेंगे।


नहीं ... मेरे लिए कोई फर्क नहीं पड़ा (ASP.Net कोर 2.1 के साथ)। अभी भी आउटपुट विंडो में "एप्लिकेशन इनसाइट्स टेलीमेट्री" संदेशों का एक पहाड़ मिलता है।
माइक Gledhill

7

हमने इसे डिबग लॉग में ट्रेस करने से रोकने के लिए सबसे आसान तरीका पाया है:

Extensibility.Implementation.TelemetryDebugWriter.IsTracingDisabled = True

5

Microsoft.ApplicationInsights.AspNetCore संस्करण 2.1

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

क्या यह Application Insights Telemetry (unconfigured)दृश्य स्टूडियो में डीबग पैनल से संदेशों को छिपाने के लिए माना जाता है - क्योंकि यदि ऐसा नहीं लगता है तो यह काम नहीं करता है :-(
सिमोन_विएवर

3
मुझे यकीन नहीं है कि इस तरह का संदेश क्या है। मुझे विश्वास है कि आप ढूंढ रहे हैंTelemetryDebugWriter.IsTracingDisabled = true; उन्हें हटाने के हैं।
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
यह आज अप्रचलित है, हम आज कैसे ठीक से करते हैं?
l

0

.NET कोर 3.1 के बाद से:

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

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

1
यहाँ ऐसा करने के लिए डॉक्स हैं, जिसमें डिपेंडेंसी इंजेक्शन के माध्यम से टेलीमेट्रीकोनफिगरेशन प्राप्त करना शामिल है: docs.microsoft.com/en-us/azure/azure-monitor/app/…
Noah Stahl

0

ASP.NET कोर 3.1 के रूप में:

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

(उपरोक्त को कहीं से भी कॉल किया जा सकता है, लेकिन जितनी जल्दी आपके आवेदन का जीवनचक्र, बेहतर होगा)।

आपके कोड में सभी एप्लिकेशन इनसाइट्स गतिविधि को दबाने के लिए दोनों का एक साथ उपयोग किया जा सकता है। मैं #if DEBUGयह सुनिश्चित करने के लिए एक निर्देश के साथ रक्षा करता हूं कि AppInsights मेरे स्थानीय मशीन पर कुछ भी नहीं करता है, लेकिन हमारे एज़्योर देव सर्वर पर अपलोड होने पर घटनाओं का उत्सर्जन करता है:

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

        TelemetryDebugWriter.IsTracingDisabled = true;
#endif
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.