Làm cách nào để nhanh chóng và thuận tiện vô hiệu hóa tất cả các câu lệnh console.log trong mã của tôi?


257

Có cách nào để tắt tất cả các console.logcâu lệnh trong mã JavaScript của tôi cho mục đích thử nghiệm không?


11
sử dụng trình soạn thảo văn bản hỗ trợ "thay thế tất cả" và thay thế "console.log" bằng "//console.log"
helloandre

5
@helloandre - điều đó gây ra một chút mệt mỏi mặc dù nếu bạn sử dụng nhật ký, thông tin, cảnh báo gỡ lỗi và lỗi
UpTheCalet

Hy vọng rằng chúng ta sẽ đạt đến điểm mà việc triển khai trình duyệt tự động bỏ qua các câu lệnh bảng điều khiển trừ khi công cụ gỡ lỗi của trình duyệt được bật.
ngất xỉu

2
Các câu trả lời dưới đây rất hay, nhưng bạn không cần phải phát minh lại cái bánh xe này. Có một cái nhìn vào picolog . Nó có API tương thích với bảng điều khiển (NodeJS), vì vậy bạn có thể sử dụng nó như một sự thay thế thả xuống. Nó hỗ trợ các mức ghi nhật ký, hoạt động trong trình duyệt, trên NodeJS và trên Nashorn, có thể dễ dàng cấu hình từ chuỗi truy vấn (trình duyệt) hoặc biến môi trường PICOLOG_LEVEL(nút) và nó siêu nhỏ. Ít hơn 900 byte được rút gọn và nén. Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả.
Stijn de Witt

Có một cách đơn giản để ghi đè tất cả các consolechức năng. Chỉ cần nhìn vào stapp.space/disable-javascript-console-on-production
Piotr Stapp

Câu trả lời:


427

Xác định lại chức năng console.log trong tập lệnh của bạn.

console.log = function() {}

Thế là xong, không còn tin nhắn nào đến console.

BIÊN TẬP:

Mở rộng về ý tưởng của Cide. Trình ghi nhật ký tùy chỉnh mà bạn có thể sử dụng để chuyển đổi đăng nhập / tắt từ mã của mình.

Từ bảng điều khiển Firefox của tôi:

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

Làm thế nào để sử dụng 'logger' ở trên? Trong sự kiện sẵn sàng của bạn, hãy gọi logger.disableLogger để các thông điệp trên bàn điều khiển không được ghi lại. Thêm cuộc gọi vào logger.enableLogger và logger.disableLogger bên trong phương thức mà bạn muốn ghi thông điệp vào bảng điều khiển.


Vui lòng cung cấp chi tiết như những gì không hoạt động? Có dòng trên cho bạn một lỗi? Nếu có, thông báo lỗi là gì?
SolutionYogi

1
Hoạt động cho tôi trong IE8. ;-)
Eugene Lazutkin

Mã này sẽ ghi đè và khôi phục chức năng console.log. Nếu IE7 hỗ trợ phương thức console.log, nó sẽ hoạt động.
SolutionYogi

3
console.log = function () {} dường như không hoạt động trong Firefox. Bạn vẫn nhận được lỗi 'bảng điều khiển không được xác định'.
DA.

2
Thật là một giải pháp kinh khủng. Sửa đổi console.log... Tại sao không chỉ có một boolean và một hàm điều kiện để đăng nhập?
Mất trí nhớ

76

Sau đây là kỹ lưỡng hơn:

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

Điều này sẽ loại bỏ các phương thức phổ biến trong bảng điều khiển nếu nó tồn tại và chúng có thể được gọi mà không có lỗi và hầu như không có chi phí hoạt động. Trong trường hợp trình duyệt như IE6 không có giao diện điều khiển, các phương thức giả sẽ được tạo để tránh lỗi. Tất nhiên, có nhiều chức năng hơn trong Fireorms, như theo dõi, hồ sơ, thời gian, v.v. Chúng có thể được thêm vào danh sách nếu bạn sử dụng chúng trong mã của mình.

Bạn cũng có thể kiểm tra xem trình gỡ lỗi có các phương thức đặc biệt đó hay không (ví dụ: IE) và loại bỏ các phương thức mà nó không hỗ trợ:

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

Điều này làm việc cho tôi một cách hoàn hảo, mặc dù tôi đã điều chỉnh nó một chút, tôi đã kiểm tra môi trường (tôi chỉ muốn nó bị vô hiệu hóa trong sản xuất)
Muganwas

27

Theo như tôi có thể nói từ tài liệu này , Fireorms không cung cấp bất kỳ biến nào để chuyển trạng thái gỡ lỗi. Thay vào đó, hãy bọc console.log () trong một trình bao bọc có điều kiện gọi nó, nghĩa là:

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

Để không phải thay đổi tất cả các cuộc gọi hiện tại, bạn có thể sử dụng điều này thay thế:

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
Cảm ơn, mặc dù điều này có nghĩa là tôi cần viết lại tất cả các câu lệnh console.log của mình dưới dạng debug.log.
Zack Burt

Đây là cách đúng đắn để làm điều đó - tất nhiên nếu bạn đang bắt đầu từ đầu.
OpenSource

3
Đây cũng là cách đúng đắn để làm điều đó nếu bạn có chức năng tìm / thay thế tốt trong trình chỉnh sửa của mình.
BaroqueBobcat

2
Không cần phải viết trình bao bọc của riêng bạn, btw, ít nhất là nếu bạn đang sử dụng jQuery. Plugin gỡ lỗi jQuery hoạt động rất tốt. Là một phần thưởng, nó cung cấp mô phỏng của console.log trên các trình duyệt mà không có nó. trainof Dùts.org/blog/2007/03/16/jquery
Nelson

Tất nhiên, vấn đề [nhỏ] duy nhất là bạn cần cài đặt một plugin. :) Rất tốt để biết, mặc dù - cảm ơn!
Cide

17

Bạn không nên!

Nó không phải là một thực hành tốt để ghi đè các chức năng tích hợp. Cũng không có gì đảm bảo rằng bạn sẽ triệt tiêu tất cả đầu ra, các thư viện khác bạn sử dụng có thể hoàn nguyên các thay đổi của bạn và có các chức năng khác có thể ghi vào bảng điều khiển; .dir(), .warning(), .error(), .debug(), .assert(), Vv

Như một số gợi ý, bạn có thể xác định một DEBUG_MODEbiến và đăng nhập có điều kiện. Tùy thuộc vào độ phức tạp và tính chất của mã của bạn, có thể là một ý tưởng tốt để viết đối tượng / hàm logger của riêng bạn bao quanh đối tượng giao diện điều khiển và có khả năng này tích hợp. Đó sẽ là nơi thích hợp để giải quyết các thiết bị .

Điều đó nói rằng, với mục đích 'thử nghiệm', bạn có thể viết thử nghiệm thay vì in ra bàn điều khiển. Nếu bạn không thực hiện bất kỳ thử nghiệm nào và những console.log()dòng đó chỉ là một trợ giúp để viết mã của bạn, chỉ cần xóa chúng .


7
"other libraries you use may revert your changes": nếu tôi vô hiệu hóa console.logngay từ đầu, chúng không thể trở lại chức năng cũ. Chà, họ có thể viết lại console.logmã nguồn, nhưng tại sao? "it may be a good idea to write your own logger object/function that wraps around the console object": Tôi đã làm điều này trong quá khứ và đó là một ý tưởng tồi. Dấu vết của đầu ra giao diện điều khiển đề cập đến trình bao bọc và không phải là dòng gọi nó, làm cho việc gỡ lỗi trở nên khó khăn hơn.
Marco Sulla

3
@LucasMalor "ngay từ đầu" ngụ ý mã được kết hợp với cơ sở hạ tầng đó, do đó hạn chế khả năng sử dụng lại của nó. Thật khó để khái quát hóa mặc dù; Một trò chơi, một số hình ảnh động DOM không giống như logic miền bên trong một SPA phức tạp, sau này không nên biết về trình duyệt, chứ đừng nói đến việc biết về một thứ gọi là "bàn điều khiển". Trong trường hợp đó, bạn nên có một chiến lược thử nghiệm phù hợp thay vì hack một số console.log('Look ma, it reaches this point');mã của mình, khi mọi thứ khác không thực sự bạn có thể sử dụng debugger;hướng dẫn.
istepaniuk

"the code is coupled to that infrastructure": mã có thể, nhưng mẫu không. Nếu bạn tạo một mẫu cơ bản phổ biến cho các trang của mình nơi chức năng ghi nhật ký bị vô hiệu hóa, đó là logic mà bạn có thể áp dụng ở mọi nơi. "the later shouldn't be browser-aware": tốt, vì vậy bạn không nên sử dụng JS: P
Marco Sulla

3
@MarcoSulla Tôi nghĩ rằng anh ấy đang viết mã sạch hơn. Nói ".... bạn không nên sử dụng JS" thì hơi nặng tay. Lý tưởng nhất, là một lập trình viên, bất kể môi trường của bạn là gì, bạn nên mô đun hóa càng nhiều càng tốt; nếu nó không quan tâm đến các trình duyệt, thì bạn có thể triển khai nó ở nhiều nơi hơn: đó là một sự phụ thuộc ít hơn để lo lắng về việc phá vỡ nội dung của bạn. Vì vậy, IMHO yeah, anh ấy thực sự đúng. Hãy nhớ rằng bạn đã bắt đầu bằng cách nói "Nếu bạn tạo một mẫu cơ bản chung ..." mà chính nó sẽ giới thiệu một phụ thuộc. Kiểu suy nghĩ này là những gì làm phức tạp phần mềm. Thức ăn cho suy nghĩ.
dudewad

1
Adobe SiteCatalyics ném rất nhiều rác trong bảng điều khiển của tôi và gây rắc rối cho việc gỡ lỗi trong một số trường hợp. Vì vậy, việc có thể tạm thời vô hiệu hóa console.log khi tôi thực hiện cuộc gọi của bên thứ ba sẽ khá hữu ích đối với tôi
spinn

16

Tôi nhận ra đây là một bài viết cũ nhưng nó vẫn xuất hiện ở đầu kết quả của Google, vì vậy đây là một giải pháp không phải jQuery thanh lịch hơn, hoạt động trong Chrome, FF và IE mới nhất.

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

12

Tôi biết bạn đã hỏi làm thế nào để vô hiệu hóa console.log, nhưng đây có thể là những gì bạn thực sự theo đuổi. Bằng cách này, bạn không cần phải bật hoặc tắt bảng điều khiển một cách rõ ràng. Nó chỉ đơn giản là ngăn chặn các lỗi bảng điều khiển phiền phức cho những người không mở hoặc cài đặt.

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
Đối với vô hiệu hóa đăng nhập cụ thể IE xem Chris S. trả lời.
Giáo sư

11

Chỉ cần thay đổi cờ DEBUGđể ghi đè chức năng console.log. Cái này cần phải dùng mẹo.

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

2
Tôi sẽ tiến thêm một bước và gói nó trong một hàm / lớp logger. Một cái gì đó như thế này:function myLog(msg) { if (debug) { console.log(msg); } }
sleblanc

Nếu sử dụng Angular, bạn có thể sử dụng nó làm cấu hình toàn cầu trong tệp application.js của mình và sử dụng nó làm tài sản chung để bật / tắt nhật ký. Hãy nhớ rằng, bàn điều khiển sẽ không được xác định nếu bạn mở thanh công cụ dành cho nhà phát triển trong IE.
Swanidhi

10

Tôi ngạc nhiên rằng trong tất cả những câu trả lời không ai kết hợp:

  • Không có jquery
  • Hàm ẩn danh để không gây ô nhiễm không gian tên toàn cầu
  • Xử lý trường hợp window.console không được xác định
  • Chỉ cần sửa đổi chức năng .log của giao diện điều khiển

Tôi muốn làm điều này:

(function () {

    var debug = false

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

9

Sau khi tôi tìm kiếm vấn đề này và thử nó trong ứng dụng cordova của mình, tôi chỉ muốn cảnh báo mọi nhà phát triển cho windows phone để không ghi đè

    console.log

bởi vì ứng dụng sẽ bị sập khi khởi động.

Nó sẽ không sụp đổ nếu bạn đang phát triển địa phương nếu bạn may mắn, nhưng việc gửi vào cửa hàng sẽ dẫn đến việc làm hỏng ứng dụng.

Chỉ cần ghi đè

    window.console.log 

nếu bạn cần.

Điều này hoạt động trong ứng dụng của tôi:

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

    }

Cảm ơn đã "cảnh báo". TUY NHIÊN, tôi đã phát hành ứng dụng dựa trên cordova của mình trên cửa hàng GooglePlay, đã thử nghiệm nó với các thiết bị điện thoại và tất cả đều ổn. Tôi có thể cho rằng cảnh báo của bạn bị giới hạn trong cửa hàng ứng dụng "dựa trên windows"? ... TUY NHIÊN, lời khuyên tốt là nên đặt ops trong khung thử bắt chỉ trong trường hợp nó nổ tung. Do đó ngón tay cái lên.
Panini trưa

8

Nếu bạn đang sử dụng IE7, bảng điều khiển sẽ không được xác định. Vì vậy, một phiên bản thân thiện hơn với IE sẽ là:

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

5

Đây là một câu trả lời kết hợp từ SolutionYogiChris S. Nó duy trì số dòng và tên tệp của console.log. Ví dụ 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

Ive đã sử dụng những điều sau đây để giải quyết vấn đề của anh ta: -

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

Đặt gỡ lỗi thành 1 để bật gỡ lỗi. Sau đó sử dụng chức năng logger khi xuất văn bản gỡ lỗi. Nó cũng được thiết lập để chấp nhận hai tham số.

Vì vậy, thay vì

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

sử dụng

logger("my","log");

3

Tôi đã sử dụng winston logger trước đó.

Ngày nay tôi đang sử dụng mã đơn giản dưới đây từ kinh nghiệm:

  1. Đặt biến môi trường từ cmd / dòng lệnh (trên Windows):

    cmd
    setx LOG_LEVEL info

Hoặc, bạn có thể có một biến trong mã của mình nếu bạn thích, nhưng ở trên là tốt hơn.

  1. Khởi động lại cmd / dòng lệnh hoặc IDE / trình soạn thảo như Netbeans

  2. Có mã dưới đây:

    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. Bây giờ sử dụng tất cả giao diện điều khiển. * Như dưới đây:

    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

Bây giờ, dựa trên các cài đặt LOG_LEVEL của bạn được thực hiện ở điểm 1 (như setx LOG_LEVEL logvà khởi động lại dòng lệnh), một số ở trên sẽ in, một số khác sẽ không in

Hy vọng rằng đã giúp.


2

Cảnh báo: Không biết xấu hổ cắm!

Bạn cũng có thể sử dụng một cái gì đó giống như đối tượng JsTrace của tôi để theo dõi mô-đun với khả năng "chuyển đổi" cấp mô-đun để chỉ bật những gì bạn muốn thấy tại thời điểm đó.

http://jstrace.codeplex.com

(Cũng có gói NuGet, dành cho những người quan tâm)

Tất cả các cấp mặc định là "lỗi", mặc dù bạn có thể tắt "tắt". Mặc dù vậy, tôi không thể nghĩ tại sao bạn KHÔNG muốn thấy lỗi

Bạn có thể thay đổi chúng như thế này:

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

Để biết thêm tài liệu, hãy xem Tài liệu

T


2

Tôi đã tìm thấy một đoạn mã nâng cao hơn một chút trong url JavaScript này Mẹo: Bust và Vô hiệu hóa 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

Tôi đã phát triển một thư viện cho usecase này: https://github.com/sunnykgupta/jsLogger

Đặc trưng:

  1. Nó an toàn ghi đè lên console.log.
  2. Cần quan tâm nếu bảng điều khiển không có sẵn (ồ vâng, bạn cũng cần phải tính đến yếu tố đó.)
  3. Lưu trữ tất cả các bản ghi (ngay cả khi chúng bị chặn) để phục hồi sau này.
  4. Xử lý giao diện điều khiển các chức năng chính như log, warn, error, info.

Được mở để sửa đổi và sẽ được cập nhật bất cứ khi nào đề xuất mới.


2

Điều này sẽ ghi đè tất cả các phương thức của window.console. Bạn có thể đặt nó lên trên cùng của phần script của bạn và nếu bạn đang ở trong khung PHP, bạn chỉ có thể in mã này khi môi trường ứng dụng của bạn đang sản xuất hoặc nếu một loại cờ gỡ lỗi nào đó bị tắt. Sau đó, bạn sẽ có tất cả các bản ghi trong mã của bạn làm việc trên môi trường phát triển hoặc trong chế độ gỡ lỗi.

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

Tôi đã viết điều này:

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

    }
}

Thật không may, nó không hoạt động trên chế độ nghiêm ngặt.

Vì vậy, sử dụng console.fn.setEnabled = setEnabledvà sau đó console.fn.setEnabled(false)ở đâu fncó thể là hầu hết các chức năng điều khiển. Đối với trường hợp của bạn sẽ là:

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

Tôi cũng đã viết điều này:

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

do đó, bạn chỉ cần đặt FLAGSgiá trị mặc định (trước khi thực thi mã ở trên), như FLAGS.LOG = falsevà chức năng nhật ký sẽ bị tắt theo mặc định, và bạn vẫn có thể kích hoạt tính năng gọi nóconsole.log.setEnabled(true)


Bạn có nghĩ rằng điều này có thể được sử dụng để kích hoạt console.log trong môi trường sản xuất một cách nhanh chóng không? như mở bảng điều khiển Chrome, chạy console.log.setEnabled(true)và bắt đầu xem nhật ký
Rodrigo Assis

1
@RodrigoAssis vâng, nó sẽ hoạt động. Tôi đã tạo điều này chỉ để không mất dòng người gọi và bật bất cứ nơi nào, nhưng đây không phải là cách tốt nhất để làm điều đó. Cách tốt nhất để ghi nhật ký là sử dụng cách ngắn mạch như: var debug = false; debug && console.log(1/3)vì bạn không cần đánh giá nội dung nhật ký nếu nó không được bật (trong trường hợp 1/3này sẽ không được đánh giá), đừng để mất dòng người gọi và có thể bật nó cũng dễ dàng (nếu không vars như consts).
Gabriel De Oliveira Rohden

1

Giải pháp toàn diện của tôi để vô hiệu hóa / ghi đè tất cả các console.*chức năng là ở đây .

Tất nhiên, hãy chắc chắn rằng bạn đang bao gồm nó sau khi kiểm tra bối cảnh cần thiết. Ví dụ, chỉ bao gồm trong bản phát hành sản xuất, nó không ném bom bất kỳ thành phần quan trọng nào khác, v.v.

Trích dẫn ở đây:

"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

Nếu bạn đang sử dụng gulp, thì bạn có thể sử dụng plugin này :

Cài đặt plugin này bằng lệnh:

npm install gulp-remove-logging

Tiếp theo, thêm dòng này vào gulpfile của bạn:

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

Cuối cùng, thêm các cài đặt cấu hình (xem bên dưới) vào gulpfile của bạn.

Cấu hình tác vụ

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

1

Đơn giản hóa 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() {};
}

0

Bạn có thể sử dụng javascript AOP (ví dụ jquery-aop ) để chặn tất cả các cuộc gọi đến console.debug / log (xung quanh) và không tiến hành lệnh gọi thực tế nếu một số biến toàn cục được đặt thành false.

Bạn thậm chí có thể thực hiện cuộc gọi ajax (bây giờ và sau đó) để bạn có thể thay đổi hành vi được bật / tắt nhật ký trên máy chủ, điều này rất thú vị để bật gỡ lỗi khi gặp sự cố trong môi trường dàn dựng hoặc như vậy.


Tôi đã không thực hiện một giải pháp như vậy, tôi đã không nhìn thấy nó. Đó là lý thuyết cho đến nay.
Stijn Geukens

0

Bạn có thể sử dụng logeek , Nó cho phép bạn kiểm soát mức độ hiển thị thông điệp tường trình của bạn. Đây là cách bạn làm điều đó:

<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

Bạn cũng có thể logeek.show('nothing')vô hiệu hóa hoàn toàn mọi thông điệp tường trình.


0

Sau khi thực hiện một số nghiên cứu và phát triển cho vấn đề này, tôi đã tìm ra giải pháp này sẽ ẩn các cảnh báo / Lỗi / Nhật ký theo sự lựa chọn của bạn.

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

Thêm mã này trước plugin JQuery (ví dụ /../jquery.min.js) ngay cả khi đây là mã JavaScript không yêu cầu JQuery. Bởi vì một số cảnh báo nằm trong chính JQuery.

Cảm ơn!!


0

Tôi đã viết một giải pháp ES2015 (chỉ sử dụng với 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);
  }
}

Sự miêu tả:

  1. Cùng với logger.enable và logger.disable, bạn có thể sử dụng các phương thức console. ['Log', 'warn', 'error'] cũng như sử dụng lớp logger.
  2. Bằng cách sử dụng lớp logger để hiển thị, bật hoặc tắt thông báo giúp mã sạch hơn và có thể duy trì được.
  3. Mã dưới đây cho bạn thấy cách sử dụng lớp logger:
    • logger.disable() - vô hiệu hóa tất cả các tin nhắn bàn điều khiển
    • logger.enable() - kích hoạt tất cả các tin nhắn trên bàn điều khiển
    • logger.log('message1', 'message2') - hoạt động chính xác như console.log.
    • logger.warn('message1', 'message2') - hoạt động chính xác như console.warn.
    • logger.error('message1', 'message2')- hoạt động chính xác như console.error. Chúc mừng mã hóa ..
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.