मेरे कोड में सभी कंसोल.लॉग स्टेटमेंट को जल्दी और आसानी से कैसे अक्षम करें?


256

क्या console.logपरीक्षण उद्देश्यों के लिए मेरे जावास्क्रिप्ट कोड में सभी कथनों को बंद करने का कोई तरीका है?


11
एक टेक्स्ट एडिटर का उपयोग करें जो "सभी को बदलें" और "कंसोल.लॉग" को "//console.log" से बदल देता है
हेल्लोएंड्रे

5
@helloandre - यदि आप लॉग,
इंफो

उम्मीद है कि हम उस बिंदु तक पहुंच जाएंगे जहां ब्राउज़र कार्यान्वयन स्वचालित रूप से स्टेटमेंट को बायपास करता है जब तक कि ब्राउज़र का डिबगिंग टूल सक्षम नहीं होता है।
faintsignal

2
नीचे दिए गए उत्तर बहुत अच्छे हैं, लेकिन आपको इस पर पहिया को फिर से स्थापित करने की आवश्यकता नहीं है। पिकनिक पर एक नजर है । इसमें (NodeJS के) कंसोल के साथ संगत API है, इसलिए आप इसे ड्रॉप-इन प्रतिस्थापन के रूप में उपयोग कर सकते हैं। यह बॉक्स के बाहर लॉगिंग स्तरों का समर्थन करता है, ब्राउज़र में काम करता है, NodeJS पर और नैशॉर्न पर, आसानी से क्वेरिस्ट्रिंग (ब्राउज़र) या पर्यावरण चर PICOLOG_LEVEL(नोड) से कॉन्फ़िगर किया जा सकता है और यह सुपर छोटा है। कम से कम 900 बाइट्स को छोटा और ज़िप किया गया। डिस्क्लेमर: मैं लेखक हूं।
Stijn de Witt

सभी consoleकार्यों को ओवरराइड करने का एक सरल तरीका है । बस stapp.space/disable-javascript-console-on-production
Piotr Stapp

जवाबों:


426

अपनी स्क्रिप्ट में कंसोल.लॉग फ़ंक्शन को फिर से परिभाषित करें।

console.log = function() {}

यह वही है, जो सांत्वना के लिए अधिक संदेश नहीं है।

संपादित करें:

Cide के विचार पर विस्तार। एक कस्टम लकड़हारा जिसका उपयोग आप अपने कोड से लॉगिंग चालू / बंद करने के लिए कर सकते हैं।

मेरे फ़ायरफ़ॉक्स कंसोल से:

var logger = function()
{
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger =  function enableLogger() 
                        {
                            if(oldConsoleLog == null)
                                return;

                            window['console']['log'] = oldConsoleLog;
                        };

    pub.disableLogger = function disableLogger()
                        {
                            oldConsoleLog = console.log;
                            window['console']['log'] = function() {};
                        };

    return pub;
}();

$(document).ready(
    function()
    {
        console.log('hello');

        logger.disableLogger();
        console.log('hi', 'hiya');
        console.log('this wont show up in console');

        logger.enableLogger();
        console.log('This will show up!');
    }
 );

उपरोक्त 'लकड़हारा' का उपयोग कैसे करें? अपने तैयार इवेंट में, logger.disableLogger पर कॉल करें ताकि कंसोल संदेश लॉग न हों। उस विधि के अंदर logger.enableLogger और logger.disableLogger पर कॉल जोड़ें, जिसके लिए आप कंसोल को संदेश लॉग करना चाहते हैं।


कृपया विस्तार से बताएं कि क्या काम नहीं करता है? क्या उपरोक्त पंक्ति आपको कोई त्रुटि देती है? यदि हाँ, तो त्रुटि संदेश क्या है?
सॉल्यूशनयोगी

1
IE8 में मेरे लिए काम करता है। ;-)
यूजीन लज़ुटकिन

कोड ओवरराइट करता है और कंसोल.लॉग फ़ंक्शन को पुनर्स्थापित करता है। यदि IE7 कंसोल.लॉग विधि का समर्थन करता है, तो इसे काम करना चाहिए।
SolutionYogi

3
कंसोल.लॉग = फ़ंक्शन () {} फ़ायरफ़ॉक्स में काम नहीं करता है। आपको अभी भी एक 'कंसोल परिभाषित नहीं है' त्रुटि मिलती है।
डीए।

2
क्या एक भयानक समाधान है। संशोधित console.log... लॉगिंग के लिए सिर्फ एक बूलियन और एक सशर्त फ़ंक्शन क्यों नहीं है?
13

76

निम्नलिखित अधिक गहन है:

var DEBUG = false;
if(!DEBUG){
    if(!window.console) window.console = {};
    var methods = ["log", "debug", "warn", "info"];
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

यह कंसोल में मौजूद सामान्य विधियों को शून्य कर देगा यदि यह मौजूद है, और उन्हें त्रुटि के बिना बुलाया जा सकता है और वस्तुतः कोई प्रदर्शन ओवरहेड नहीं होता है। IE6 जैसे ब्राउज़र के मामले में बिना कंसोल के, त्रुटियों को रोकने के लिए डमी तरीके बनाए जाएंगे। निश्चित रूप से फायरबग में कई और कार्य हैं, जैसे ट्रेस, प्रोफ़ाइल, समय, आदि। उन्हें सूची में जोड़ा जा सकता है यदि आप उन्हें अपने कोड में उपयोग करते हैं।

आप यह भी देख सकते हैं कि डिबगर के पास वे विशेष विधियाँ हैं या नहीं (अर्थात, IE) और शून्य का समर्थन नहीं करती हैं:

if(window.console && !console.dir){
var methods = ["dir", "dirxml", "trace", "profile"]; //etc etc
    for(var i=0;i<methods.length;i++){
        console[methods[i]] = function(){};
    }
}

यह मेरे लिए पूरी तरह से काम करता है, हालांकि मैंने इसे थोड़ा छोटा किया, मैंने पर्यावरण के लिए जांच की (मैं केवल इसे उत्पादन में अक्षम करना चाहता हूं)
मुगंवास

27

जहां तक ​​मैं प्रलेखन से बता सकता हूं , फायरबग डीबग राज्य को टॉगल करने के लिए किसी भी चर की आपूर्ति नहीं करता है। इसके बजाय, एक आवरण में कंसोल.लॉग () लपेटें जो सशर्त रूप से इसे कहते हैं, अर्थात:

DEBUG = true; // set to false to disable debugging
function debug_log() {
    if ( DEBUG ) {
        console.log.apply(this, arguments);
    }
}

सभी मौजूदा कॉल को बदलने के लिए नहीं, आप इसके बजाय इसका उपयोग कर सकते हैं:

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}

1
धन्यवाद, हालांकि इसका मतलब है कि मुझे debug.log के रूप में अपने सभी कंसोल.लॉग स्टेटमेंट को फिर से लिखना होगा।
ज़ैक बर्ट

यह करने का सही तरीका है - यदि आप खरोंच से शुरू कर रहे हैं तो संभोग करें।
OpenSource

3
यदि आपके पास अपने संपादक में एक अच्छा खोज / प्रतिस्थापन फ़ंक्शन है, तो इसे करना भी सही तरीका है।
बरोकबेकैट

2
यदि आप jQuery का उपयोग कर रहे हैं, तो कम से कम अपने स्वयं के आवरण, btw, लिखने की आवश्यकता नहीं है। JQuery डीबगिंग प्लगइन महान काम करता है। एक बोनस के रूप में यह बिना ब्राउज़र के कंसोल.लॉग का अनुकरण प्रदान करता है। trainof मगरts.org/blog/2007/03/16/jquery-plugin-debug
नेल्सन

एकमात्र [मामूली] समस्या, ज़ाहिर है, कि आपको एक प्लगइन स्थापित करने की आवश्यकता है। :) पता करने के लिए अच्छा है, हालांकि - धन्यवाद!
Cide

17

तुम्हे नही करना चाहिए!

अंतर्निहित कार्यों को अधिलेखित करने के लिए यह एक अच्छा अभ्यास नहीं है। इस बात की भी कोई गारंटी नहीं है कि आप सभी आउटपुट को दबा देंगे, आपके द्वारा उपयोग किए जाने वाले अन्य पुस्तकालय आपके परिवर्तनों को वापस ला सकते हैं और ऐसे अन्य कार्य हैं जो कंसोल पर लिख सकते हैं; .dir(), .warning(), .error(), .debug(), .assert()आदि

जैसा कि कुछ ने सुझाव दिया है, आप एक DEBUG_MODEचर को परिभाषित कर सकते हैं और सशर्त रूप से लॉग इन कर सकते हैं। आपके कोड की जटिलता और प्रकृति के आधार पर, अपने स्वयं के लकड़हारे ऑब्जेक्ट / फ़ंक्शन को लिखना एक अच्छा विचार हो सकता है जो कंसोल ऑब्जेक्ट के चारों ओर लपेटता है और इसमें यह क्षमता अंतर्निहित है। यह उपकरण के साथ सौदा करने के लिए सही जगह होगी ।

उस ने कहा, 'परीक्षण' प्रयोजनों के लिए आप लिख सकते हैं परीक्षण कंसोल पर मुद्रण के बजाय । यदि आप कोई परीक्षण नहीं कर रहे हैं, और वे console.log()लाइनें आपके कोड को लिखने के लिए एक सहायता थीं, तो बस उन्हें हटा दें


7
"other libraries you use may revert your changes": यदि मैं console.logबहुत शुरुआत में अक्षम हो जाता हूं , तो वे पुराने फ़ंक्शन पर वापस नहीं लौट सकते। ठीक है, वे console.logस्रोत कोड को फिर से लिख सकते हैं , लेकिन क्यों? "it may be a good idea to write your own logger object/function that wraps around the console object": मैंने यह अतीत में किया है और यह एक बुरा विचार है। कंसोल आउटपुट का ट्रेस रैपर को संदर्भित करता है और न कि उस रेखा को जो इसे लागू करता है, जिससे डिबगिंग और अधिक कठिन हो जाती है।
मार्को सुल्ला

3
@ LucasMalor "बहुत शुरुआत में" का अर्थ है कि कोड को उस बुनियादी ढांचे से जोड़ा जाता है, जिससे इसकी पुन: प्रयोज्यता सीमित हो जाती है। हालांकि इसे सामान्यीकृत करना मुश्किल है; एक खेल, कुछ DOM एनिमेशन एक जटिल स्पा के अंदर डोमेन लॉजिक के समान नहीं हैं, बाद में ब्राउज़र-जागरूक नहीं होना चाहिए, अकेले "कंसोल" नामक कुछ के बारे में जानने दें। उस मामले में आपके पास console.log('Look ma, it reaches this point');अपने कोड में कुछ हैक करने के बजाय एक उचित परीक्षण रणनीति होनी चाहिए , जब बाकी सब कुछ विफल हो जाता है तो आप वास्तव में debugger;निर्देश का उपयोग कर सकते हैं ।
istepaniuk

"the code is coupled to that infrastructure": कोड शायद, लेकिन पैटर्न नहीं। यदि आप अपने पृष्ठों के लिए एक सामान्य बुनियादी टेम्पलेट बनाते हैं जहाँ लॉगिंग फ़ंक्शन अक्षम हैं, तो यह एक तर्क है जिसे आप हर जगह लागू कर सकते हैं। "the later shouldn't be browser-aware": ठीक है, इसलिए आपको JS: P
Marco Sulla

3
@MarcoSulla मुझे लगता है कि वह क्लीनर कोड लिख रहा है। ".... आपको JS का उपयोग नहीं करना चाहिए" कहना थोड़ा भारी है। आदर्श रूप में, एक प्रोग्रामर के रूप में, कोई फर्क नहीं पड़ता कि आपका वातावरण क्या है, आपको जितना संभव हो उतना संशोधित करना चाहिए; यदि यह ब्राउज़रों के बारे में परवाह नहीं करता है, तो आप इसे और अधिक स्थानों पर तैनात कर सकते हैं: यह एक कम निर्भरता है जो आपके सामान को तोड़ने के बारे में चिंता करने के लिए है। तो, IMHO हाँ, वह वास्तव में सही है। ध्यान रखें कि आपने "यदि आप एक सामान्य बुनियादी टेम्पलेट बनाते हैं ..." कहकर शुरुआत की है, जो स्वयं में और एक निर्भरता का परिचय देता है। इस तरह की सोच सॉफ्टवेयर को जटिल बनाती है। सोच के लिए भोजन।
ड्यूडवेड

1
Adobe SiteCatalyics मेरे कंसोल में बहुत सारे कबाड़ फेंकता है और कुछ मामलों में डिबगिंग की परेशानी पैदा करता है। अस्थायी रूप से अक्षम console.log करने में सक्षम होने जब मैं एक तीसरे पक्ष के कॉल पर अमल मेरे लिए बहुत उपयोगी होगा तो
spinn

16

मुझे लगता है कि यह एक पुरानी पोस्ट है, लेकिन यह अभी भी Google परिणामों के शीर्ष पर पॉप अप करता है, इसलिए यहां एक अधिक सुरुचिपूर्ण गैर-jQuery समाधान है जो नवीनतम Chrome, FF और IE में काम करता है।

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);

12

मुझे पता है कि आपने कंसोल.लॉग को अक्षम करने का तरीका पूछा था, लेकिन यह वही हो सकता है जो आप वास्तव में हैं। इस तरह से आपको कंसोल को स्पष्ट रूप से सक्षम या अक्षम नहीं करना है। यह केवल उन pesky कंसोल त्रुटियों को उन लोगों के लिए रोकता है जिनके पास यह खुला या स्थापित नहीं है।

if(typeof(console) === 'undefined') {
    var console = {};
    console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time = console.timeEnd = console.assert = console.profile = function() {};
}

2
IE विशिष्ट लॉगिंग अक्षम करने के लिए क्रिस एस उत्तर देखें।
गुरु

11

बस DEBUGकंसोल को बदलें .log फ़ंक्शन को ओवरराइड करने के लिए। यह काम कर जाना चाहिए।

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}

2
मैं एक कदम और आगे जाऊंगा और इसे एक लकड़हारा समारोह / कक्षा में लपेटूंगा। कुछ इस तरह से:function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc

यदि कोणीय का उपयोग करते हैं, तो आप इसे अपने एप्लिकेशन में एक वैश्विक कॉन्फ़िगरेशन के रूप में उपयोग कर सकते हैं। जेएस फ़ाइल और लॉग को चालू / बंद करने के लिए इसे वैश्विक संपत्ति के रूप में उपयोग कर सकते हैं। याद रखें, यदि आपके पास IE में डेवलपर्स टूलबार खुला है तो कंसोल अपरिभाषित नहीं होगा।
स्वनिधि

10

मुझे आश्चर्य है कि उन सभी उत्तरों में से कोई भी संयोजन नहीं है:

  • कोई गुड़ नहीं
  • बेनामी समारोह वैश्विक नाम स्थान को प्रदूषित नहीं करने के लिए
  • हैंडल केस जहां window.console परिभाषित नहीं है
  • बस कंसोल के .log फ़ंक्शन को संशोधित करें

मैं इसके लिए जाऊंगा:

(function () {

    var debug = false

    if (debug === false) {
        if ( typeof(window.console) === 'undefined') { window.console = {}; }
        window.console.log = function () {};
    }
})()

9

जब मैंने इस मुद्दे को खोज लिया और अपने कॉर्डोवा ऐप में इसे आज़माया, तो मैं बस हर डेवलपर को विंडोज़ फोन के लिए आगाह करना चाहता हूं कि वह ओवरराइट न करे।

    console.log

क्योंकि ऐप स्टार्टअप पर क्रैश हो जाएगा।

यदि आप भाग्यशाली हैं तो यह स्थानीय रूप से विकसित नहीं होगा, लेकिन स्टोर में जमा करने के परिणामस्वरूप यह ऐप क्रैश हो जाएगा।

बस ओवरराइट करें

    window.console.log 

अगर आप की जरूरत है।

यह मेरे ऐप में काम करता है:

   try {
        if (typeof(window.console) != "undefined") {
            window.console = {};
            window.console.log = function () {
            };
            window.console.info = function () {
            };
            window.console.warn = function () {
            };
            window.console.error = function () {
            };
        }

        if (typeof(alert) !== "undefined") {
            alert = function ()
            {

            }
        }

    } catch (ex) {

    }

चेतावनी के लिए धन्यवाद"। फिर भी, मेरे पास मेरा कॉर्डोवा-आधारित ऐप GooglePlay स्टोर पर जारी किया गया था, फोन उपकरणों के साथ इसका परीक्षण किया और सभी ठीक थे। मैं मान सकता हूं कि आपकी चेतावनी "विंडोज़-आधारित" ऐप स्टोर तक सीमित थी? ... फिर भी, यह अच्छा है कि अगर यह उड़ जाए, तो कोशिश-कैच ब्रैकेट के भीतर ऑप्स रखना अच्छा है। इसलिए अंगूठा-अप।
पाणिनी लंचर

8

यदि आप IE7 का उपयोग कर रहे हैं, तो कंसोल को परिभाषित नहीं किया जाएगा। तो एक अधिक IE अनुकूल संस्करण होगा:

if (typeof console == "undefined" || typeof console.log == "undefined") 
{
   var console = { log: function() {} }; 
}

5

SolutionYogi और क्रिस एस से जवाब का एक संकर यह कंसोल.लॉग लाइन नंबर और फ़ाइल नाम रखता है। उदाहरण jsFiddle

// Avoid global functions via a self calling anonymous one (uses jQuery)
(function(MYAPP, $, undefined) {
    // Prevent errors in browsers without console.log
    if (!window.console) window.console = {};
    if (!window.console.log) window.console.log = function(){};

    //Private var
    var console_log = console.log;  

    //Public methods
    MYAPP.enableLog = function enableLogger() { console.log = console_log; };   
    MYAPP.disableLog = function disableLogger() { console.log = function() {}; };

}(window.MYAPP = window.MYAPP || {}, jQuery));


// Example Usage:
$(function() {    
    MYAPP.disableLog();    
    console.log('this should not show');

    MYAPP.enableLog();
    console.log('This will show');
});

4

यदि आप ग्रंट का उपयोग करते हैं तो आप कंसोल.लॉग स्टेटमेंट को हटाने / टिप्पणी करने के लिए एक कार्य जोड़ सकते हैं। इसलिए कंसोल.लॉग को अब कॉल नहीं किया जाता है।

https://www.npmjs.org/package/grunt-remove-logging-calls


3

Ive समस्या से निपटने के लिए निम्नलिखित का उपयोग कर रहा है: -

var debug = 1;
var logger = function(a,b){ if ( debug == 1 ) console.log(a, b || "");};

डिबगिंग को सक्षम करने के लिए डीबग को 1 पर सेट करें। डिबग टेक्स्ट को आउटपुट करते समय लकड़हारा फ़ंक्शन का उपयोग करें। यह दो मापदंडों को स्वीकार करने के लिए भी स्थापित किया गया है।

तो, के बजाय

console.log("my","log");

उपयोग

logger("my","log");

3

मैंने पहले विंस्टन लॉगर का उपयोग किया है ।

आजकल मैं अनुभव से नीचे सरल कोड का उपयोग कर रहा हूं:

  1. Cmd / कमांड लाइन (विंडोज पर) से पर्यावरण चर सेट करें:

    cmd
    setx LOG_LEVEL info

या, आप अपने कोड में एक चर हो सकता है यदि आप चाहें, लेकिन ऊपर बेहतर है।

  1. Cmd / कमांड लाइन, या, NetEeans की तरह IDE / संपादक को पुनरारंभ करें

  2. कोड की तरह नीचे है:

    console.debug = console.log;   // define debug function
    console.silly = console.log;   // define silly function
    
    switch (process.env.LOG_LEVEL) {
        case 'debug':
        case 'silly':
            // print everything
            break;
    
        case 'dir':
        case 'log':
            console.debug = function () {};
            console.silly = function () {};
            break;
    
        case 'info':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            break;
    
        case 'trace':   // similar to error, both may print stack trace/ frames
        case 'warn':    // since warn() function is an alias for error()
        case 'error':
            console.debug = function () {};
            console.silly = function () {};
            console.dir = function () {};
            console.log = function () {};
            console.info = function () {};
            break;
    }
  3. अब सभी कंसोल का उपयोग करें। * नीचे के रूप में:

    console.error(' this is a error message '); // will print
    console.warn(' this is a warn message '); // will print
    console.trace(' this is a trace message '); // will print
    console.info(' this is a info message '); // will print, LOG_LEVEL is set to this
    
    console.log(' this is a log message '); // will NOT print
    console.dir(' this is a dir message '); // will NOT print
    console.silly(' this is a silly message '); // will NOT print
    console.debug(' this is a debug message '); // will NOT print

अब, बिंदु 1 में बनाई गई आपकी LOG_LEVEL सेटिंग्स के आधार पर (जैसे setx LOG_LEVEL logऔर कमांड लाइन को पुनरारंभ करें), ऊपर के कुछ प्रिंट होंगे, अन्य प्रिंट नहीं करेंगे

उम्मीद है कि मदद की।


2

चेतावनी: बेशर्म प्लग!

आप मॉड्यूल-स्तरीय "स्विचिंग" क्षमता के साथ मॉड्यूलर अनुरेखण के लिए मेरी JsTrace ऑब्जेक्ट की तरह कुछ का उपयोग भी कर सकते हैं केवल उस समय जो आप देखना चाहते हैं उसे चालू करें।

http://jstrace.codeplex.com

(देखभाल करने वालों के लिए एक NuGet पैकेज भी है)

सभी स्तर "त्रुटि" के लिए डिफ़ॉल्ट हैं, हालांकि आप उन्हें "बंद" कर सकते हैं। हालाँकि, मैं यह नहीं सोच सकता कि आप त्रुटियों को क्यों नहीं देखना चाहेंगे

आप उन्हें इस तरह बदल सकते हैं:

Trace.traceLevel('ModuleName1', Trace.Levels.log);
Trace.traceLevel('ModuleName2', Trace.Levels.info);

और अधिक डॉक्स, दस्तावेज़ीकरण देखें

टी


2

मुझे इस url जावास्क्रिप्ट टिप में कोड का थोड़ा और उन्नत टुकड़ा मिला : Bust and Disable कंसोल.log :

var DEBUG_MODE = true; // Set this value to false for production

if(typeof(console) === 'undefined') {
   console = {}
}

if(!DEBUG_MODE || typeof(console.log) === 'undefined') {
   // FYI: Firebug might get cranky...
   console.log = console.error = console.info = console.debug = console.warn = console.trace = console.dir = console.dirxml = console.group = console.groupEnd = console.time =    console.timeEnd = console.assert = console.profile = function() {};
}

2

मैंने इस usecase के लिए एक पुस्तकालय विकसित किया: https://github.com/sunnykgupta/jsLogger

विशेषताएं:

  1. यह कंसोल.लॉग को सुरक्षित रूप से ओवरराइड करता है।
  2. कंसोल उपलब्ध नहीं होने पर देखभाल करता है (ओह हाँ, आपको वह भी करने की आवश्यकता है।)
  3. सभी लॉग को संग्रहीत करता है (भले ही वे दबा दिए गए हों) बाद में पुनर्प्राप्ति के लिए।
  4. संभालती प्रमुख सांत्वना कार्यों की तरह log, warn, error, info

संशोधनों के लिए खुला है और जब भी नए सुझाव आएंगे तो उन्हें अपडेट किया जाएगा।


2

यह window.console के सभी तरीकों को ओवरराइड करना चाहिए। आप इसे अपने स्क्रिप्ट अनुभाग के शीर्ष पर रख सकते हैं, और यदि आप एक PHP फ्रेमवर्क पर हैं, तो आप केवल इस कोड को प्रिंट कर सकते हैं जब आपके ऐप का वातावरण उत्पादन होता है, या यदि किसी प्रकार का डिबग ध्वज अक्षम होता है। तब आपके पास आपके सभी लॉग आपके कोड में विकास के वातावरण पर काम कर रहे होंगे या डिबग मोड में होंगे।

window.console = (function(originalConsole){
    var api = {};
    var props = Object.keys(originalConsole);
    for (var i=0; i<props.length; i++) {
        api[props[i]] = function(){};
    }
    return api;
})(window.console);

1

मैंने यह लिखा:

//Make a copy of the old console.
var oldConsole = Object.assign({}, console);

//This function redefine the caller with the original one. (well, at least i expect this to work in chrome, not tested in others)
function setEnabled(bool) {
    if (bool) {
        //Rewrites the disable function with the original one.
        console[this.name] = oldConsole[this.name];
        //Make sure the setEnable will be callable from original one.
        console[this.name].setEnabled = setEnabled;
    } else {
        //Rewrites the original.
        var fn = function () {/*function disabled, to enable call console.fn.setEnabled(true)*/};
        //Defines the name, to remember.
        Object.defineProperty(fn, "name", {value: this.name});
        //replace the original with the empty one.
        console[this.name] = fn;
        //set the enable function
        console[this.name].setEnabled = setEnabled

    }
}

दुर्भाग्य से यह सख्त मोड के उपयोग पर काम नहीं करता है।

इसलिए उपयोग करना console.fn.setEnabled = setEnabledऔर फिर लगभग कोई कंसोल फ़ंक्शन console.fn.setEnabled(false)कहां fnहो सकता है। आपके मामले के लिए होगा:

console.log.setEnabled = setEnabled;
console.log.setEnabled(false);

मैंने यह भी लिखा:

var FLAGS = {};
    FLAGS.DEBUG = true;
    FLAGS.INFO = false;
    FLAGS.LOG = false;
    //Adding dir, table, or other would put the setEnabled on the respective console functions.

function makeThemSwitchable(opt) {
    var keysArr = Object.keys(opt);
    //its better use this type of for.
    for (var x = 0; x < keysArr.length; x++) {
        var key = keysArr[x];
        var lowerKey = key.toLowerCase();
        //Only if the key exists
        if (console[lowerKey]) {
            //define the function
            console[lowerKey].setEnabled = setEnabled;
            //Make it enabled/disabled by key.
            console[lowerKey].setEnabled(opt[key]);
        }
    }
}
//Put the set enabled function on the original console using the defined flags and set them.
makeThemSwitchable(FLAGS);

तो फिर आपको बस FLAGSडिफ़ॉल्ट मान (उपरोक्त कोड को निष्पादित करने से पहले) में डालना होगा , जैसे FLAGS.LOG = falseऔर लॉग फ़ंक्शन डिफ़ॉल्ट रूप से अक्षम हो जाएगा, और फिर भी आप इसे कॉल करने में सक्षम कर सकते हैंconsole.log.setEnabled(true)


क्या आपको लगता है कि इसका उपयोग फ़्लाइ पर उत्पादन वातावरण में कंसोल.लॉग को सक्षम करने के लिए किया जा सकता है? खुले क्रोम कंसोल की तरह, रन console.log.setEnabled(true)और लॉग देखना शुरू करें
रोड्रिगो असिस

1
@RodrigoAssis हाँ, यह काम करेगा। मैंने इसे सिर्फ कॉलर लाइन खोने और कहीं भी सक्षम करने के लिए बनाया है, लेकिन यह इसे करने का सबसे अच्छा तरीका नहीं है। लॉग के लिए सबसे अच्छा तरीका शॉर्ट सर्किट तरीके का उपयोग करना है: var debug = false; debug && console.log(1/3)क्योंकि आपको लॉग सामग्री का मूल्यांकन करने की आवश्यकता नहीं है यदि यह सक्षम नहीं है (इस मामले में 1/3मूल्यांकन नहीं किया जाएगा), कॉलर लाइन न खोएं और सक्षम कर सकते हैं यह आसानी से भी (यदि const के रूप में var नहीं है)।
गेब्रियल डी ओलिवेरा रोहडन

1

सभी console.*कार्यों को अक्षम / ओवरराइड करने का मेरा व्यापक समाधान यहाँ है

बेशक, कृपया सुनिश्चित करें कि आवश्यक संदर्भ की जाँच के बाद आप इसे शामिल कर रहे हैं। उदाहरण के लिए, केवल उत्पादन रिलीज सहित, यह किसी भी अन्य महत्वपूर्ण घटकों आदि पर बमबारी नहीं कर रहा है।

इसे यहां उद्धृत करते हुए:

"use strict";
(() => {
  var console = (window.console = window.console || {});
  [
    "assert", "clear", "count", "debug", "dir", "dirxml",
    "error", "exception", "group", "groupCollapsed", "groupEnd",
    "info", "log", "markTimeline", "profile", "profileEnd", "table",
    "time", "timeEnd", "timeStamp", "trace", "warn"
  ].forEach(method => {
    console[method] = () => {};
  });
  console.log("This message shouldn't be visible in console log");
})();


1

यदि आप gulp का उपयोग कर रहे हैं, तो आप इस प्लगइन का उपयोग कर सकते हैं :

इस प्लगइन को कमांड के साथ इंस्टॉल करें:

npm install gulp-remove-logging

इसके बाद, इस लाइन को अपने gulpfile में जोड़ें:

var gulp_remove_logging = require("gulp-remove-logging");

अंत में, अपने gulpfile में कॉन्फ़िगरेशन सेटिंग्स (नीचे देखें) जोड़ें।

कार्य विन्यास

gulp.task("remove_logging", function() {
     return gulp.src("src/javascripts/**/*.js")
    .pipe(
      gulp_remove_logging()
    )
    .pipe(
      gulp.dest(
        "build/javascripts/"
      )
    ); });


0

आप जावास्क्रिप्ट AOP (जैसे jquery-aop) का उपयोग कर सकते हैं सभी कॉल्स को कंसोल.debug / log (आसपास) को इंटरसेप्ट करने के ) का और यदि कुछ ग्लोबल वैरिएबल झूठे पर सेट है तो वास्तविक इनवॉइस के साथ आगे न बढ़ें।

आप एक एजाक्स कॉल (अभी और तब) भी कर सकते हैं ताकि आप सर्वर पर लॉग सक्षम / अक्षम व्यवहार को बदल सकें जो कि स्टेजिंग वातावरण या इस तरह की समस्या का सामना करते समय डिबगिंग को सक्षम करने के लिए बहुत दिलचस्प हो सकता है।


मैंने इस तरह के समाधान को लागू नहीं किया है, मैंने इसे नहीं देखा। यह अब तक का सैद्धांतिक है।
स्टिजेन ज्युकेंस

0

आप logeek का उपयोग कर सकते हैं , यह आपको अपने लॉग संदेश दृश्यता को नियंत्रित करने की अनुमति देता है। यहाँ है कि तुम कैसे करते हो:

<script src="bower_components/dist/logeek.js"></script>

logeek.show('security');

logeek('some message').at('copy');       //this won't be logged
logeek('other message').at('secturity'); //this would be logged

आप logeek.show('nothing')हर लॉग संदेश को पूरी तरह से अक्षम भी कर सकते हैं ।


0

इस समस्या के लिए कुछ शोध और विकास करने के बाद, मैं इस समाधान पर आया हूं जो आपकी पसंद के अनुसार चेतावनी / त्रुटियां / लॉग छिपाएगा।

    (function () {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function () {        
        console.warn = function () { };
        window['console']['warn'] = function () { };
        this.addEventListener('load', function () {                        
            console.warn('Something bad happened.');
            window['console']['warn'] = function () { };
        });        
    };
})();

इस कोड को JQuery प्लगइन से पहले जोड़ें (जैसे /../jquery.min.js) यहां तक ​​कि यह जावास्क्रिप्ट कोड भी है जिसके लिए JQuery की आवश्यकता नहीं है। क्योंकि कुछ चेतावनी JQuery में ही हैं।

धन्यवाद!!


0

मैं एक ने लिखा ES2015 (केवल के साथ प्रयोग के समाधान Webpack )।

class logger {
  static isEnabled = true;

  static enable () {
    if(this.constructor.isEnabled === true){ return; }

    this.constructor.isEnabled = true;
  }

  static disable () {
    if(this.constructor.isEnabled === false){ return; }

    this.constructor.isEnabled = false;
  }

  static log () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['log'].apply(this, copy);
  }

  static warn () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['warn'].apply(this, copy);
  }

  static error () {
    if(this.constructor.isEnabled === false ) { return; }

    const copy = [].slice.call(arguments);

    window['console']['error'].apply(this, copy);
  }
}

विवरण:

  1. Logger.enable और logger.disable के साथ आप कंसोल का उपयोग कर सकते हैं। ['लॉग', 'चेतावनी', 'त्रुटि'] विधियों के साथ-साथ लकड़हारा वर्ग का उपयोग कर।
  2. संदेश प्रदर्शित करने, सक्षम करने या अक्षम करने के लिए लकड़हारा वर्ग का उपयोग करके कोड को बहुत अधिक क्लीनर और बनाए रखने योग्य बनाता है।
  3. नीचे दिए गए कोड से पता चलता है कि आप लकड़हारे वर्ग का उपयोग कैसे करते हैं:
    • logger.disable() - सभी कंसोल संदेशों को अक्षम करें
    • logger.enable() - सभी कंसोल संदेशों को सक्षम करें
    • logger.log('message1', 'message2') - बिल्कुल कंसोल.लॉग की तरह काम करता है।
    • logger.warn('message1', 'message2') - बिल्कुल सांत्वना की तरह काम करता है। अनवर।
    • logger.error('message1', 'message2')- बिल्कुल कंसोल की तरह काम करता है। हैप्पी कोडिंग ।।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.