Kodumdaki tüm console.log deyimlerini hızlı ve kolay bir şekilde nasıl devre dışı bırakabilirim?


258

console.logTest amacıyla JavaScript kodumdaki tüm ifadeleri kapatmanın bir yolu var mı ?


11
"tümünü değiştir" i destekleyen bir metin düzenleyicisi kullanın ve "console.log" ifadesini "//console.log" ile değiştirin
helloandre

5
@helloandre - günlük, bilgi, hata ayıklama ve hata uyarmak olsa biraz yorucu olur
UpTheCreek

Umarım, tarayıcının hata ayıklama aracı etkinleştirilmediği sürece tarayıcı uygulamalarının konsol deyimlerini otomatik olarak atladığı bir noktaya ulaşacağız.
faintsignal

2
Aşağıdaki cevaplar harika, ama tekerleği yeniden icat etmek zorunda değilsiniz. Picolog'a bir göz atın . (NodeJS'nin) konsolu ile uyumlu bir API'ya sahiptir, böylece onu bir yedek değiştirme olarak kullanabilirsiniz. Kutudan çıkma günlük seviyelerini destekler, tarayıcıda, NodeJS ve Nashorn'da çalışır, sorgu dizgisinden (tarayıcı) veya ortam değişkeninden PICOLOG_LEVEL(düğüm) kolayca yapılandırılabilir ve süper küçüktür. 900 bayttan daha az küçültülmüş ve sıkıştırılmıştır. Feragatname: Ben yazarım.
Stijn de Witt

Tüm consoleişlevleri geçersiz kılmanın basit bir yolu vardır . Sadece stapp.space/disable-javascript-console-on-production bakın
Piotr Stapp

Yanıtlar:


429

Komut dosyanızdaki console.log işlevini yeniden tanımlayın.

console.log = function() {}

Hepsi bu, konsolda artık mesaj yok.

DÜZENLE:

Cide'nin fikrini genişletmek. Kodunuzdan günlüğe kaydetmeyi açmak / kapatmak için kullanabileceğiniz özel bir günlükçü.

Firefox konsolumdan:

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!');
    }
 );

Yukarıdaki 'logger' nasıl kullanılır? Hazır etkinliğinizde, konsol iletilerinin günlüğe kaydedilmemesi için logger.disableLogger öğesini çağırın. Konsolda iletileri günlüğe kaydetmek istediğiniz yöntemin içine logger.enableLogger ve logger.disableLogger öğelerine çağrı ekleyin.


Lütfen neyin işe yaramadığı hakkında ayrıntılı bilgi verin? Yukarıdaki satır size bir hata veriyor mu? Evetse, hata mesajı nedir?
SolutionYogi

1
IE8'de benim için çalışıyor. ;-)
Eugene Lazutkin

Kod, console.log işlevinin üzerine yazar ve geri yükler. IE7 console.log yöntemini destekliyorsa, çalışmalıdır.
SolutionYogi

3
console.log = function () {}, Firefox'ta çalışmıyor gibi görünüyor. Hala 'konsol tanımlı değil' hatası alıyorsunuz.
DA.

2
Ne korkunç bir çözüm. Değiştiriliyor console.log... Neden yalnızca günlük kaydı için bir boole ve koşullu işlevi yok?
Dementic

76

Aşağıdakiler daha ayrıntılıdır:

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(){};
    }
}

Bu, varsa konsoldaki ortak yöntemleri sıfırlar ve hatasız ve neredeyse hiç performans yükü olmadan çağrılabilir. Konsolu olmayan IE6 gibi bir tarayıcı durumunda, hataları önlemek için kukla yöntemler oluşturulacaktır. Elbette Firebug'da izleme, profil, zaman vb. Gibi daha birçok işlev vardır. Bunları kodunuzda kullanırsanız listeye eklenebilirler.

Hata ayıklayıcının bu özel yöntemlere sahip olup olmadığını da kontrol edebilirsiniz (IE) ve desteklemediklerini sıfırlayabilirsiniz:

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(){};
    }
}

Bu benim için mükemmel çalıştı, biraz değiştirmiş
olmama

27

Belgelerden anlayabildiğim kadarıyla Firebug, hata ayıklama durumunu değiştirmek için herhangi bir değişken sağlamaz. Bunun yerine, koşullu olarak çağıran bir sarmalayıcıya console.log () yazın, yani:

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

Mevcut tüm aramaları değiştirmek zorunda kalmamak için bunun yerine bunu kullanabilirsiniz:

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
Teşekkürler, bununla birlikte, tüm console.log ifadelerimi debug.log olarak yeniden yazmam gerektiği anlamına gelir.
Zack Burt

Sıfırdan başlıyorsanız, bunu yapmanın doğru yolu budur.
OpenSource

3
Ayrıca, düzenleyicinizde iyi bir bul / değiştir işleviniz varsa bunu yapmanın doğru yoludur.
BaroqueBobcat

2
En azından jQuery kullanıyorsanız kendi paketleyicinizi yazmanıza gerek yok. JQuery Hata Ayıklama Eklentisi harika çalışıyor. Bonus olarak, onsuz tarayıcılarda console.log öykünmesini sağlar. trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug
Nelson

Tek [küçük] sorun, elbette, bir eklenti yüklemeniz gerektiğidir. :) Yine de bilmek güzel - teşekkürler!
Cide

17

Bunun eski bir gönderi olduğunu anlıyorum, ancak yine de Google sonuçlarının en üstünde yer alıyor, bu yüzden en yeni Chrome, FF ve IE'de çalışan daha zarif bir jQuery çözümü yok.

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

17

Yapmamalısın!

Yerleşik işlevlerin üzerine yazmak iyi bir uygulama değildir. Ayrıca tüm çıktıları bastıracağınıza dair bir garanti yoktur, kullandığınız diğer kütüphaneler değişikliklerinizi geri alabilir ve konsola yazabilecek başka işlevler vardır; .dir(), .warning(), .error(), .debug(), .assert()Vs.

Bazılarının önerdiği gibi, DEBUG_MODEkoşullu olarak bir değişken ve günlük tanımlayabilirsiniz . Kodunuzun karmaşıklığına ve niteliğine bağlı olarak, konsol nesnesini saran ve bu özelliğe sahip olan kendi logger nesnenizi / işlevinizi yazmak iyi bir fikir olabilir. Enstrümantasyonla uğraşmak için doğru yer burası olurdu .

Bununla birlikte, 'test' amacıyla , konsola yazdırmak yerine testler yazabilirsiniz . Herhangi bir test yapmıyorsanız ve bu console.log()satırlar sadece kodunuzu yazmak için bir yardımcı olduysa, bunları silin .


7
"other libraries you use may revert your changes": console.logen başta devre dışı bırakırsam , eski işleve geri dönemezler. console.logKaynak kodu yeniden yazabilirler , ama neden? "it may be a good idea to write your own logger object/function that wraps around the console object": Bunu geçmişte yaptım ve bu kötü bir fikir. Konsol çıkışının izi, hata ayıklamayı daha zor hale getiren, onu çağıran çizgiyi değil sarıcıyı ifade eder.
Marco Sulla

3
@LucasMalor "en başında" kodun bu altyapıya bağlandığını ve böylece tekrar kullanılabilirliğini sınırladığını gösterir. Yine de genelleme yapmak zordur; Bir oyun, bazı DOM animasyonları karmaşık bir SPA içindeki etki alanı mantığı ile aynı değildir, daha sonra "konsol" olarak adlandırılan bir şeyi bilmenin yanı sıra tarayıcı farkında olmamalıdır. Bu durumda console.log('Look ma, it reaches this point');, kodunuzda bazılarını hacklemek yerine uygun bir test stratejisine sahip olmalısınız , her şey başarısız olduğunda debugger;talimatı kullanabilirsiniz .
istepaniuk

"the code is coupled to that infrastructure": kod muhtemelen, ancak desen değil. Günlük tutma işlevlerinin devre dışı bırakıldığı sayfalarınız için ortak bir temel şablon oluşturursanız, her yere uygulayabileceğiniz bir mantıktır. "the later shouldn't be browser-aware": yani, JS kullanmamalısın: P
Marco Sulla

3
@MarcoSulla Bence daha temiz kodlar yazıyor. ".... JS kullanmamalısın" demek biraz ağırdır. İdeal olarak, bir programcı olarak, ortamınız ne olursa olsun, mümkün olduğunca modüler hale getirmelisiniz; tarayıcılar umurunda değilse, daha fazla yere dağıtabilirsiniz: bu, eşyalarınızı kırma konusunda endişelenmenize daha az bağımlıdır. Yani, IMHO evet, aslında haklı. Kendi başınıza bir bağımlılık yaratan "Ortak bir temel şablon oluşturursanız ..." diyerek başladığınızı unutmayın. Bu tür düşünceler yazılımı karmaşıklaştıran şeydir. Düşünce için yiyecek.
dudewad

1
Adobe SiteCatalyics, konsoluma çok fazla önemsiz atıyor ve bazı durumlarda hata ayıklama güçlüğü çekiyor. Benim için oldukça yararlı olacak bir üçüncü taraf çağrıyı yürütmek zaman geçici olarak devre dışı console.log edememek Yani
Spinn

12

Console.log'u nasıl devre dışı bırakacağınızı sorduğunuzu biliyorum, ama bu gerçekten peşinde olduğunuz şey olabilir. Bu şekilde konsolu açıkça etkinleştirmeniz veya devre dışı bırakmanız gerekmez. Bu, açık veya yüklü olmayan kişiler için bu sinir bozucu konsol hatalarını önler.

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'ye özgü günlük kaydını devre dışı bırakmak için Chris S. yanıtına bakın.
GuruM

11

Sadece DEBUGconsole.log işlevini geçersiz kılmak için bayrağı değiştirin . Bu hile yapmalı.

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

2
Bir adım daha ileri gider ve bunu bir logger fonksiyonuna / sınıfa sararım. Böyle bir şey:function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc

Angular kullanıyorsanız, application.js dosyanızda genel bir yapılandırma olarak kullanabilir ve günlükleri açmak / kapatmak için onu global bir özellik olarak kullanabilirsiniz. IE'de geliştiriciler araç çubuğu açıksa konsolun tanımsız olmayacağını unutmayın.
Swanidhi

10

Kimsenin bir araya gelmediği bu cevapların hepsine şaşırdım:

  • Jquery yok
  • Global ad alanını kirletmeyen anonim işlev
  • Window.console öğesinin tanımlanmadığı durumdaki tanıtıcı
  • Sadece konsolun .log işlevini değiştirin

Bunun için giderdim:

(function () {

    var debug = false

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

9

Bu sorunu da aradıktan ve cordova uygulamamda denedikten sonra, sadece Windows Phone için her geliştiricinin üzerine yazmaması için uyarmak istiyorum

    console.log

çünkü uygulama başlangıçta kilitlenecek.

Eğer şanslıysanız yerel olarak gelişiyorsanız çökmeyecektir, ancak mağazaya göndermek, uygulamanın çökmesine neden olacaktır.

Sadece üzerine yaz

    window.console.log 

gerekiyorsa.

Bu benim app çalışır:

   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) {

    }

Uyarı için teşekkürler". Ancak, cordova tabanlı uygulamamın GooglePlay mağazasına yayınlanmasını sağladım, telefon cihazlarıyla test ettim ve hepsi iyi. Uyarınızın "windows tabanlı" uygulama mağazası ile sınırlı olduğunu varsayabilir miyim? ANCAK, patlama durumunda ops try-catch dirseği koymak için tavsiye iyi olur. Dolayısıyla başparmak-up.
Panini Luncher

8

IE7 kullanıyorsanız, konsol tanımlanmayacaktır. Yani IE dostu bir sürüm daha:

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

5

Bu, SolutionYogi ve Chris S'den gelen cevapların bir melezidir. Console.log satır numaralarını ve dosya adını korur. Örnek 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');
});


3

Ben onunla başa çıkmak için aşağıdakileri kullanıyorum: -

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

Hata ayıklamayı etkinleştirmek için hata ayıklamayı 1 olarak ayarlayın. Daha sonra hata ayıklama metni çıkarırken logger işlevini kullanın. Ayrıca iki parametreyi kabul edecek şekilde ayarlanmıştır.

Yani, yerine

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

kullanım

logger("my","log");

3

Winston kullandım önceki logger.

Günümüzde deneyimden daha basit bir kod kullanıyorum:

  1. Ortam değişkenini cmd / komut satırından ayarlayın (Windows'ta):

    cmd
    setx LOG_LEVEL info

Veya, isterseniz kodunuzda bir değişken olabilir, ancak yukarıdaki daha iyidir.

  1. Cmd / komut satırını veya Netbeans gibi IDE / düzenleyiciyi yeniden başlatın

  2. Aşağıdaki gibi kodu var:

    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. Şimdi tüm konsolu kullanın. * Aşağıdaki gibi:

    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

Şimdi, 1. noktada yapılan LOG_LEVEL ayarlarınıza dayanarak (örneğin, setx LOG_LEVEL log komut satırını ve yeniden başlatın), yukarıdakilerin bazıları yazdırılacak, diğerleri yazdırılmayacak

Umut etmek bu yardım etmek.


2

Uyarı: Utanmaz fiş!

JsTrace nesnem gibi bir şeyi, yalnızca o anda görmek istediğiniz şeyi açmak için modül düzeyinde "anahtarlama" özelliğine sahip modüler izlemeye sahip olmak için kullanabilirsiniz.

http://jstrace.codeplex.com

(Ayrıca önemseyenler için bir NuGet paketi var)

Tüm seviyeleri varsayılan olarak "hata" dır, ancak "kapatabilirsiniz". Yine de neden hataları görmek istemeyeceğinizi düşünemiyorum

Bunları şu şekilde değiştirebilirsiniz:

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

Daha docs Fore, kontrol Belgeleri

T


2

Bu url'de biraz daha gelişmiş bir kod parçası buldum JavaScript İpucu: Göğüs ve Devre Dışı console.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

Bu kullanıcı için bir kütüphane geliştirdim: https://github.com/sunnykgupta/jsLogger

Özellikleri:

  1. Console.log dosyasını güvenli bir şekilde geçersiz kılar.
  2. Konsol mevcut değilse ilgilenir (oh evet, bunu da hesaba katmanız gerekir.)
  3. Tüm günlükleri (bastırılsalar bile) daha sonra almak üzere saklar.
  4. Kolları majör konsol fonksiyonları gibi log, warn, error, info.

Değişikliklere açıktır ve yeni öneriler geldiğinde güncellenecektir.


2

Bu, tüm window.console yöntemlerini geçersiz kılmalıdır. Komut dosyaları bölümünüzün en üstüne koyabilirsiniz ve bir PHP çerçevesindeyseniz bu kodu yalnızca uygulama ortamınız üretildiğinde veya bir tür hata ayıklama bayrağı devre dışı bırakıldığında yazdırabilirsiniz. Daha sonra kodunuzdaki tüm günlüklerin geliştirme ortamlarında veya hata ayıklama modunda çalışırsınız.

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

Bunu ben yazdım:

//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

    }
}

Ne yazık ki katı mod kullanımı üzerinde çalışmıyor.

Böylece hemen hemen her konsol fonksiyonu kullanılabilir console.fn.setEnabled = setEnabledve sonra console.fn.setEnabled(false)nerede fnolabilir. Davanız için:

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

Bunu ben de yazdım:

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);

bu nedenle FLAGS, varsayılan değeri (yukarıdaki kodu çalıştırmadan önce) girmeniz yeterlidir FLAGS.LOG = false, günlük işlevi varsayılan olarak devre dışı bırakılır ve yine de çağrıyı etkinleştirebilirsinizconsole.log.setEnabled(true)


Bunun üretim ortamında anında console.log'u etkinleştirmek için kullanılabileceğini düşünüyor musunuz? açık Chrome konsolu gibi, çalıştırın console.log.setEnabled(true)ve günlükleri görmeye başlayın
Rodrigo Assis

1
@RodrigoAssis evet, işe yarayacak. Arayan hattını kaybetmemek ve herhangi bir yerde etkinleştirmek için bunu yarattım, ancak bu bunu yapmanın en iyi yolu değil. Günlükler için en iyi yol, kısa devre yöntemini kullanmaktır: var debug = false; debug && console.log(1/3)çünkü etkin değilse günlük içeriğini değerlendirmeniz gerekmez (bu durumda 1/3değerlendirilmez), arayan hattını kaybetmeyin ve etkinleştirebilirsiniz kolayca da (eğer consts olarak değişmezse).
Gabriel De Oliveira Rohden

1

Tüm console.*işlevleri devre dışı bırakmak / geçersiz kılmak için kapsamlı çözümüm burada .

Tabii ki, lütfen gerekli bağlamı kontrol ettikten sonra dahil ettiğinizden emin olun. Örneğin, sadece üretim sürümü dahil olmak üzere, diğer önemli bileşenleri bombalamaz.

Burada alıntı yapılıyor:

"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 kullanıyorsanız, bu eklentiyi kullanabilirsiniz :

Bu eklentiyi şu komutla yükleyin:

npm install gulp-remove-logging

Ardından, bu satırı gulpfile'ınıza ekleyin:

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

Son olarak, gulpfile'ınıza yapılandırma ayarlarını (aşağıya bakın) ekleyin.

Görev Yapılandırması

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


0

Javascript AOP kullanabilirsiniz (örn. Jquery-aop ), console.debug / log (around) öğesine yapılan tüm çağrıları kesmek ve bazı global değişken false olarak ayarlanmışsa gerçek çağırma işlemine devam etmek için kullanabilirsiniz.

Ajax çağrısı bile (şimdi ve sonra) yapabilirsiniz, böylece sunucudaki günlük etkin / devre dışı davranışını, bir hazırlama ortamında veya böyle bir sorunla karşılaştığınızda hata ayıklamayı etkinleştirmek için çok ilginç olabilir.


Böyle bir çözüm uygulamadım, görmedim. Şimdiye kadar teorik.
Stijn Geukens

0

Logeek kullanabilirsiniz , Bu günlük mesajları görünürlüğünü kontrol etmenizi sağlar. Bunu nasıl yapacağınız aşağıda açıklanmıştır:

<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

Ayrıca logeek.show('nothing')her günlük mesajını tamamen devre dışı bırakabilirsiniz.


0

Bu sorun için biraz araştırma ve geliştirme yaptıktan sonra, uyarılara / Hataları / Günlükleri seçiminize göre gizleyecek bu çözüme rastladım.

    (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 gerektirmeyen JavaScript kodu olsa bile bu kodu JQuery eklentisinden önce ekleyin (örn. /../Jquery.min.js). Çünkü bazı uyarılar JQuery'de.

Teşekkürler!!


0

Bir ES2015 çözümü yazdım (yalnızca Webpack ile kullanın ).

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);
  }
}

Açıklama:

  1. Logger.enable ve logger.disable ile birlikte logger sınıfını kullanarak console. ['Log', 'warn', 'error'] yöntemlerini de kullanabilirsiniz.
  2. Mesajları görüntülemek, etkinleştirmek veya devre dışı bırakmak için logger sınıfını kullanmak kodu daha temiz ve bakım yapılabilir hale getirir.
  3. Aşağıdaki kod logger sınıfının nasıl kullanılacağını gösterir:
    • logger.disable() - tüm konsol mesajlarını devre dışı bırak
    • logger.enable() - tüm konsol mesajlarını etkinleştir
    • logger.log('message1', 'message2') - tam olarak console.log gibi çalışır.
    • logger.warn('message1', 'message2') - tam olarak console.warn gibi çalışır.
    • logger.error('message1', 'message2')- tam olarak console.error gibi çalışır. Mutlu kodlama ..
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.