ウェブサイト検索

javascript - コード内のすべての console.log 文を迅速かつ便利に無効化する方法は?


テスト目的で、JavaScript コード内のすべての console.log 文をオフにする方法はありますか?

回答 #1

スクリプト内でconsole.log関数を再定義してください。

console.log = function() {}

それで終わりです、コンソールへのメッセージはもうありません。

編集:

Cideのアイデアを拡張する。コードからログのオン/オフを切り替えるために使用できるカスタムロガー。

私のFirefoxコンソールから:

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' をどのように使うか?ready イベント内で logger.disableLogger を呼び出して、コンソールメッセージが記録されないようにします。コンソールにメッセージを記録したいメソッドの内部で、logger.enableLogger と logger.disableLogger の呼び出しを追加します。

回答 #2

以下はより詳しいです:

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のようにコンソールがないブラウザの場合、ダミーメソッドが作成され、エラーを防ぎます。もちろん、trace、profile、timeなど、Firebugにはさらに多くの関数があります。コードで使用する場合は、それらをリストに追加することもできます。

デバッガにそれらの特別なメソッドがあるかどうか(例えば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(){};
    }
}

回答 #3

ドキュメントを見る限りでは、Firebug はデバッグ状態を切り替えるための変数を提供していません。代わりに、console.log() を条件付きで呼び出すラッパーで包みます。つまり、次のようにします:

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

回答 #4

あなたはしてはいけません!

組み込み関数を上書きすることは良い習慣ではありません。また、すべての出力を抑制できる保証もなく、使用している他のライブラリがあなたの変更と競合する可能性があり、コンソールに書き込む他の関数も存在します;.dir()、.warning()、.error()、.debug()、.assert() など。

いくつかの提案のように、DEBUG_MODE 変数を定義して条件付きでログを記録することができます。コードの複雑さや性質によっては、コンソールオブジェクトをラップし、この機能が組み込まれた独自のロガーオブジェクトや関数を書くことも良い考えかもしれません。それが 計測 を扱う適切な場所です。

とはいえ、'テスト'目的の場合は、コンソールに出力する代わりにテストを書くことができます。もしテストを行っておらず、これらのconsole.log()の行が単にコードを書く補助に過ぎなかった場合は、それらを単に削除してください。

回答 #5

これは古い投稿だと分かっていますが、それでもGoogleの検索結果の上位に表示されるので、最新のChrome、Firefox、IEで動作する、よりエレガントな非jQueryの解決策を紹介します。

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

回答 #6

コンソール.log関数を上書きするには、フラグDEBUGを変更するだけです。これでうまくいくはずです。

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

回答 #7

console.log を無効にする方法を尋ねたのはわかっていますが、これは本当にあなたが求めていることかもしれません。この方法なら、コンソールを明示的に有効または無効にする必要はありません。単に、コンソールを開いていないかインストールしていない人のために迷惑なコンソールエラーを防ぎます。

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

回答 #8

私は、あれだけの答えの中で誰も次のことを組み合わせていないことに驚いています:

  • jQueryなし
  • グローバル名前空間を汚さない無名関数
  • window.console が定義されていない場合の処理を行う
  • コンソールの .log 関数を変更するだけです

これにします:

(function () {

    var debug = false

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

回答 #9

私もこの問題を調べ、Cordovaアプリ内で試してみた後で、Windows Phone のすべての開発者に上書きしないよう警告したいだけです

    console.log

アプリは起動時にクラッシュするので。

もし運が良ければ、ローカルで開発している場合はクラッシュしませんが、ストアに提出するとアプリがクラッシュします。

上書きするだけ

    window.console.log 

必要なら

これは私のアプリで動作します:

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

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

            }
        }

    } catch (ex) {

    }

関連記事