Bagaimana cara cepat dan mudah menonaktifkan semua pernyataan console.log dalam kode saya?

257

Apakah ada cara untuk mematikan semua console.logpernyataan dalam kode JavaScript saya, untuk tujuan pengujian?

Zack Burt
sumber
11
menggunakan editor teks yang mendukung "ganti semua" dan ganti "console.log" dengan "//console.log"
helloandre
5
@helloandre - yang sedikit melelahkan jika Anda menggunakan log, info, peringatkan debug dan kesalahan
UpTheCreek
Semoga kita akan mencapai titik di mana implementasi browser secara otomatis memotong pernyataan konsol kecuali alat debugging browser diaktifkan.
faintsignal
2
Jawaban di bawah ini bagus, tetapi Anda tidak perlu menemukan kembali roda yang satu ini. Lihatlah picolog . Ini memiliki API yang kompatibel dengan konsol (NodeJS), sehingga Anda dapat menggunakannya sebagai pengganti drop-in. Ini mendukung level logging di luar kotak, bekerja di browser, di NodeJS dan di Nashorn, dapat dengan mudah dikonfigurasi dari querystring (browser) atau variabel lingkungan PICOLOG_LEVEL(node) dan itu super kecil. Kurang dari 900 byte diperkecil dan di-zip. Penafian: Saya penulis.
Stijn de Witt
Ada cara sederhana untuk mengganti semua consolefungsi. Lihat saja stapp.space/disable-javascript-console-on-production
Piotr Stapp

Jawaban:

427

Definisikan kembali fungsi console.log dalam skrip Anda.

console.log = function() {}

Itu saja, tidak ada lagi pesan untuk menghibur.

EDIT:

Memperluas gagasan Cide. Logger kustom yang dapat Anda gunakan untuk mengaktifkan / menonaktifkan log dari kode Anda.

Dari konsol Firefox saya:

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

Bagaimana cara menggunakan 'logger' di atas? Dalam acara siap Anda, panggilan logger.disableLogger sehingga pesan konsol tidak dicatat. Tambahkan panggilan ke logger.enableLogger dan logger.disableLogger di dalam metode yang Anda ingin log pesan ke konsol.

SolutionYogi
sumber
Harap berikan perincian tentang apa yang tidak berhasil? Apakah baris di atas memberi Anda kesalahan? Jika ya, apa pesan kesalahannya?
SolutionYogi
1
Bekerja untuk saya di IE8. ;-)
Eugene Lazutkin
Kode menimpa dan mengembalikan fungsi console.log. Jika IE7 mendukung metode console.log, itu harus bekerja.
SolutionYogi
3
console.log = function () {} tampaknya tidak berfungsi di Firefox. Anda masih mendapatkan kesalahan 'konsol tidak didefinisikan'.
DA.
2
Solusi yang mengerikan. Memodifikasi console.log... Mengapa tidak hanya memiliki boolean dan fungsi kondisional untuk logging?
Dementic
76

Berikut ini lebih menyeluruh:

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

Ini akan nol metode umum di konsol jika ada, dan mereka dapat dipanggil tanpa kesalahan dan hampir tidak ada overhead kinerja. Dalam kasus browser seperti IE6 tanpa konsol, metode dummy akan dibuat untuk mencegah kesalahan. Tentu saja ada banyak fungsi lagi di Firebug, seperti jejak, profil, waktu, dll. Mereka dapat ditambahkan ke daftar jika Anda menggunakannya dalam kode Anda.

Anda juga dapat memeriksa apakah debugger memiliki metode khusus atau tidak (yaitu, IE) dan nol yang tidak didukung:

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(){};
    }
}
mwilcox
sumber
Ini bekerja dengan baik untuk saya, meskipun saya sedikit men-tweak, saya memeriksa lingkungan (Saya hanya ingin itu dinonaktifkan dalam produksi)
Muganwas
27

Sejauh yang saya tahu dari dokumentasi , Firebug tidak menyediakan variabel apa pun untuk beralih status debug. Sebagai gantinya, bungkus console.log () dalam bungkus yang memanggilnya dengan syarat, yaitu:

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

Agar tidak harus mengubah semua panggilan yang ada, Anda dapat menggunakan ini sebagai gantinya:

DEBUG = true; // set to false to disable debugging
old_console_log = console.log;
console.log = function() {
    if ( DEBUG ) {
        old_console_log.apply(this, arguments);
    }
}
Cide
sumber
1
Terima kasih, walaupun ini berarti saya harus menulis ulang semua pernyataan console.log saya sebagai debug.log.
Zack Burt
Ini adalah cara yang tepat untuk melakukannya - tentu saja jika Anda memulai dari awal.
OpenSource
3
Ini juga cara yang tepat untuk melakukannya jika Anda memiliki fungsi temukan / ganti yang baik di editor Anda.
BaroqueBobcat
2
Tidak perlu menulis bungkus sendiri, btw, setidaknya jika Anda menggunakan jQuery. Plugin Debugging jQuery berfungsi dengan baik. Sebagai bonus itu memberikan emulasi console.log di browser tanpa itu. trainofthoughts.org/blog/2007/03/16/jquery-plugin-debug
Nelson
Satu-satunya masalah [kecil], tentu saja, adalah Anda harus menginstal plugin. :) Baik untuk tahu, meskipun - terima kasih!
Cide
17

Anda tidak harus!

Ini bukan praktik yang baik untuk menimpa fungsi bawaan. Juga tidak ada jaminan bahwa Anda akan menekan semua output, perpustakaan lain yang Anda gunakan dapat mengembalikan perubahan Anda dan ada fungsi lain yang dapat menulis ke konsol; .dir(), .warning(), .error(), .debug(), .assert()Dll

Seperti yang disarankan beberapa orang, Anda bisa mendefinisikan DEBUG_MODEvariabel dan mencatatnya secara kondisional. Bergantung pada kompleksitas dan sifat kode Anda, mungkin ide yang baik untuk menulis objek / fungsi logger Anda sendiri yang membungkus objek konsol dan memiliki kemampuan ini bawaan. Itu akan menjadi tempat yang tepat untuk berurusan dengan instrumentasi .

Yang mengatakan, untuk tujuan 'pengujian' Anda dapat menulis tes daripada mencetak ke konsol. Jika Anda tidak melakukan pengujian apa pun, dan console.log()kalimat itu hanyalah bantuan untuk menulis kode Anda, cukup hapus saja .

istepaniuk
sumber
7
"other libraries you use may revert your changes": jika saya menonaktifkan console.logdi awal, mereka tidak dapat kembali ke fungsi yang lama. Yah, mereka dapat menulis ulang console.logkode sumber, tetapi mengapa? "it may be a good idea to write your own logger object/function that wraps around the console object": Saya sudah melakukan ini di masa lalu dan itu ide yang buruk. Jejak keluaran konsol mengacu pada pembungkus dan bukan ke baris yang memanggilnya, membuat debugging lebih sulit.
Marco Sulla
3
@LucasMalor "di awal" menyiratkan kode tersebut digabungkan dengan infrastruktur sehingga membatasi penggunaannya kembali. Sulit untuk digeneralisasi; Sebuah gim, beberapa animasi DOM tidak sama dengan logika domain di dalam SPA yang kompleks, yang kemudian tidak boleh sadar browser, apalagi mengetahui tentang sesuatu yang disebut "konsol". Dalam hal ini Anda harus memiliki strategi pengujian yang tepat alih-alih meretas beberapa console.log('Look ma, it reaches this point');di kode Anda, ketika semuanya gagal Anda memang bisa menggunakan debugger;instruksi.
istepaniuk
"the code is coupled to that infrastructure": kode mungkin, tetapi polanya tidak. Jika Anda membuat template dasar umum untuk halaman Anda di mana fungsi logging dinonaktifkan, itu adalah logika yang dapat Anda terapkan di mana-mana. "the later shouldn't be browser-aware": yah, jadi Anda sebaiknya tidak menggunakan JS: P
Marco Sulla
3
@ MarscoSulla saya pikir dia mulai menulis kode bersih. Mengatakan ".... Anda seharusnya tidak menggunakan JS" agak sulit. Idealnya, sebagai seorang programmer, tidak peduli apa lingkungan Anda, Anda harus memodulasi sebanyak mungkin; jika tidak peduli dengan peramban, maka Anda dapat menyebarkannya di lebih banyak tempat: itu adalah satu-satunya ketergantungan untuk khawatir tentang merusak barang-barang Anda. Jadi, IMHO ya, dia sebenarnya benar. Ingatlah bahwa Anda mulai dengan mengatakan "Jika Anda membuat templat dasar umum ..." yang dengan sendirinya memperkenalkan ketergantungan. Jenis pemikiran inilah yang merumitkan perangkat lunak. Bahan untuk dipikirkan.
dudewad
1
Adobe SiteCatalyics melempar banyak sampah di konsol saya dan membuat kerumitan debugging dalam beberapa kasus. Jadi bisa menonaktifkan sementara console.log ketika saya melakukan panggilan pihak ketiga akan sangat berguna bagi saya
spinn
16

Saya menyadari ini adalah posting lama tetapi masih muncul di bagian atas hasil Google, jadi di sini adalah solusi non-jQuery yang lebih elegan yang bekerja di Chrome, FF, dan IE terbaru.

(function (original) {
    console.enableLogging = function () {
        console.log = original;
    };
    console.disableLogging = function () {
        console.log = function () {};
    };
})(console.log);
Joey Schooley
sumber
12

Saya tahu Anda bertanya bagaimana cara menonaktifkan console.log, tetapi ini mungkin yang Anda cari. Dengan cara ini Anda tidak perlu mengaktifkan atau menonaktifkan konsol secara eksplisit. Itu hanya mencegah kesalahan konsol yang sial untuk orang-orang yang tidak membuka atau menginstalnya.

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() {};
}
Scott Greenfield
sumber
2
Untuk menonaktifkan pencatatan khusus IE, lihat jawaban Chris S.
GuruM
11

Ubah saja flag DEBUGuntuk mengganti fungsi console.log. Ini harus melakukan trik.

var DEBUG = false;
// ENABLE/DISABLE Console Logs
if(!DEBUG){
  console.log = function() {}
}
Swanidhi
sumber
2
Saya akan melangkah lebih jauh dan membungkusnya dengan fungsi / kelas logger. Sesuatu seperti ini:function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc
Jika menggunakan Angular, Anda dapat menggunakannya sebagai konfigurasi global dalam file application.js Anda dan menggunakannya sebagai properti global untuk mengaktifkan / menonaktifkan log. Ingat, konsol tidak akan ditentukan jika Anda memiliki bilah alat pengembang terbuka di IE.
Swanidhi
10

Saya terkejut bahwa dari semua jawaban itu tidak ada yang menggabungkan:

  • Tidak ada jquery
  • Fungsi anonim untuk tidak mencemari namespace global
  • Tangani case di mana window.console tidak didefinisikan
  • Cukup modifikasi fungsi .log dari konsol

Saya akan lakukan ini:

(function () {

    var debug = false

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

Setelah saya mencari masalah ini juga dan mencobanya di aplikasi cordova saya, saya hanya ingin memperingatkan setiap pengembang untuk windows phone untuk tidak menimpa

    console.log

karena aplikasi akan macet saat startup.

Itu tidak akan crash jika Anda mengembangkan lokal jika Anda beruntung, tetapi mengirimkan di toko itu akan mengakibatkan aplikasi crash.

Timpa saja

    window.console.log 

jika perlu.

Ini berfungsi di aplikasi saya:

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

    }
biji buah
sumber
Terima kasih atas peringatannya". NAMUN, saya memiliki aplikasi berbasis cordova saya dirilis ke GooglePlay store, mengujinya dengan perangkat telepon dan semuanya baik-baik saja. Saya dapat berasumsi bahwa peringatan Anda terbatas pada toko aplikasi "berbasis windows"? ... NAMUN, ada baiknya untuk meletakkan ops di dalam try-catch bracket kalau-kalau meledak. Karena itu acungan jempol.
Panini Luncher
8

Jika Anda menggunakan IE7, konsol tidak akan ditentukan. Jadi versi yang lebih ramah IE adalah:

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

Ini adalah gabungan dari jawaban dari SolutionYogi dan Chris S. Ini mempertahankan nomor baris console.log dan nama file. Contoh 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');
});
Justin
sumber
3

Saya sudah menggunakan yang berikut untuk menangani masalah dia: -

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

Atur debug ke 1 untuk mengaktifkan debugging. Kemudian gunakan fungsi logger saat mengeluarkan teks debug. Ini juga diatur untuk menerima dua parameter.

Jadi, bukannya

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

menggunakan

logger("my","log");
Michae Pavlos Michael
sumber
3

Saya telah menggunakan winston logger sebelumnya.

Saat ini saya menggunakan kode sederhana di bawah ini dari pengalaman:

  1. Setel variabel lingkungan dari cmd / command line (pada Windows):

    cmd
    setx LOG_LEVEL info

Atau, Anda bisa memiliki variabel dalam kode Anda jika suka, tetapi di atas lebih baik.

  1. Mulai ulang cmd / command line, atau, IDE / editor seperti Netbeans

  2. Memiliki kode seperti di bawah ini:

    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. Sekarang gunakan semua konsol. * Seperti di bawah ini:

    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

Sekarang, berdasarkan pada pengaturan LOG_LEVEL Anda yang dibuat pada titik 1 (seperti, setx LOG_LEVEL logdan mulai ulang perintah), beberapa di atas akan dicetak, yang lain tidak akan mencetak

Harapan itu membantu.

Manohar Reddy Poreddy
sumber
2

Peringatan: Steker tak tahu malu!

Anda juga dapat menggunakan sesuatu seperti objek JsTrace saya untuk memiliki pelacakan modular dengan kemampuan "switching" tingkat modul untuk hanya mengaktifkan apa yang ingin Anda lihat pada saat itu.

http://jstrace.codeplex.com

(Juga memiliki paket NuGet, bagi mereka yang peduli)

Semua level default untuk "kesalahan", meskipun Anda dapat mematikannya "off". Padahal, saya tidak bisa memikirkan mengapa Anda TIDAK ingin melihat kesalahan

Anda dapat mengubahnya seperti ini:

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

Untuk lebih banyak dokumen, lihat Dokumentasi

T

Tom McKearney
sumber
2

Saya menemukan sedikit kode yang lebih maju di url JavaScript Tip ini: Bust and Disable 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() {};
}
kikeenrique
sumber
2

Saya mengembangkan perpustakaan untuk usecase ini: https://github.com/sunnykgupta/jsLogger

Fitur:

  1. Itu secara aman menimpa konsol.log.
  2. Merawat jika konsol tidak tersedia (oh ya, Anda harus mempertimbangkannya juga.)
  3. Menyimpan semua log (bahkan jika ditekan) untuk pengambilan nanti.
  4. Menangani fungsi konsol utama seperti log, warn, error, info.

Terbuka untuk modifikasi dan akan diperbarui setiap kali muncul saran baru.

Sunny R Gupta
sumber
2

Ini harus mengganti semua metode window.console. Anda dapat meletakkannya di bagian paling atas dari bagian skrip Anda, dan jika Anda menggunakan kerangka PHP Anda hanya dapat mencetak kode ini ketika lingkungan aplikasi Anda sedang diproduksi, atau jika semacam bendera debug dinonaktifkan. Maka Anda akan memiliki semua log Anda dalam kode Anda bekerja di lingkungan pengembangan atau dalam mode debug.

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);
agm-dev
sumber
1

Saya menulis ini:

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

    }
}

Sayangnya itu tidak berfungsi saat menggunakan mode ketat.

Jadi menggunakan console.fn.setEnabled = setEnableddan kemudian di console.fn.setEnabled(false)mana fnbisa hampir semua fungsi konsol. Untuk kasus Anda adalah:

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

Saya menulis ini juga:

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

demikian maka Anda hanya perlu memasukkan FLAGSnilai default (sebelum menjalankan kode di atas), seperti FLAGS.LOG = falsedan fungsi log akan dinonaktifkan secara default, dan Anda masih bisa mengaktifkannya memanggilconsole.log.setEnabled(true)

Gabriel De Oliveira Rohden
sumber
apakah Anda berpikir bahwa ini dapat digunakan untuk mengaktifkan console.log di lingkungan produksi dengan cepat? seperti konsol Chrome terbuka, jalankan console.log.setEnabled(true)dan mulai melihat log
Rodrigo Assis
1
@ RagrigoAssis ya, itu akan berhasil. Saya telah membuat ini hanya untuk tidak kehilangan saluran pemanggil dan mengaktifkan di mana saja, tetapi ini bukan cara terbaik untuk melakukannya. Cara terbaik untuk log adalah dengan menggunakan cara hubungan pendek seperti: var debug = false; debug && console.log(1/3)karena Anda tidak perlu mengevaluasi konten log jika tidak diaktifkan (dalam hal ini 1/3tidak akan dievaluasi), jangan kehilangan saluran pemanggil dan dapat mengaktifkan juga mudah (jika tidak vars sebagai const).
Gabriel De Oliveira Rohden
1

Solusi komprehensif saya untuk menonaktifkan / menimpa semua console.*fungsi ada di sini .

Tentu saja, pastikan Anda memasukkannya setelah memeriksa konteks yang diperlukan. Misalnya, hanya termasuk dalam rilis produksi, itu tidak mengebom komponen penting lainnya dll.

Mengutipnya di sini:

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

kmonsoor
sumber
1

Jika Anda menggunakan tegukan, maka Anda dapat menggunakan plugin ini :

Instal plugin ini dengan perintah:

npm install gulp-remove-logging

Selanjutnya, tambahkan baris ini ke gulpfile Anda:

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

Terakhir, tambahkan pengaturan konfigurasi (lihat di bawah) ke gulpfile Anda.

Konfigurasi Tugas

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

Penyederhanaan https://stackoverflow.com/a/46189791/871166

switch (process.env.LOG_LEVEL) {
  case 'ERROR':
    console.warn = function() {};
  case 'WARN':
    console.info = function() {};
  case 'INFO':
    console.log = function() {};
  case 'LOG':
    console.debug = function() {};
    console.dir = function() {};
}
7ynk3r
sumber
0

Anda dapat menggunakan javascript AOP (mis. Jquery-aop ) untuk mencegat semua panggilan ke console.debug / log (sekitar) dan tidak melanjutkan dengan permintaan aktual jika beberapa variabel global disetel ke false.

Anda bahkan bisa melakukan panggilan ajax (sekarang dan kemudian) sehingga Anda dapat mengubah perilaku yang diaktifkan / dinonaktifkan log di server yang bisa sangat menarik untuk mengaktifkan debug ketika menghadapi masalah dalam lingkungan pementasan atau semacamnya.

Stijn Geukens
sumber
Saya belum mengimplementasikan solusi seperti itu, saya juga tidak melihatnya. Sejauh ini teoretis.
Stijn Geukens
0

Anda dapat menggunakan logeek , Ini memungkinkan Anda untuk mengontrol visibilitas pesan log Anda. Inilah cara Anda melakukannya:

<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

Anda juga logeek.show('nothing')dapat menonaktifkan sepenuhnya setiap pesan log.

Iman Mohamadi
sumber
0

Setelah melakukan riset dan pengembangan untuk masalah ini, saya menemukan solusi ini yang akan menyembunyikan peringatan / Kesalahan / Log sesuai pilihan Anda.

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

Tambahkan kode ini sebelum plugin JQuery (misalnya /../jquery.min.js) meskipun ini adalah kode JavaScript yang tidak memerlukan JQuery. Karena beberapa peringatan ada di JQuery itu sendiri.

Terima kasih!!

Sunny_Sid
sumber
0

Saya menulis solusi ES2015 (hanya digunakan dengan 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);
  }
}

Deskripsi:

  1. Bersamaan dengan logger.enable dan logger.disable Anda dapat menggunakan metode console. ['Log', 'warn', 'error'] juga menggunakan kelas logger.
  2. Dengan menggunakan kelas logger untuk menampilkan, mengaktifkan atau menonaktifkan pesan membuat kode jauh lebih bersih dan terawat.
  3. Kode di bawah ini menunjukkan kepada Anda cara menggunakan kelas logger:
    • logger.disable() - Nonaktifkan semua pesan konsol
    • logger.enable() - aktifkan semua pesan konsol
    • logger.log('message1', 'message2') - bekerja persis seperti console.log.
    • logger.warn('message1', 'message2') - Bekerja persis seperti console.warn.
    • logger.error('message1', 'message2')- Bekerja persis seperti console.error. Selamat coding ..
Jaskaran Singh
sumber