web-dev-qa-db-ja.com

デバッグしていないときにconsole.logを無効にするにはどうすればよいですか?

私はたくさん持ってる console.logまたは他のコンソール呼び出し)で、アプリが何らかの種類の"デバッグモード"の場合にのみ使用したい。

何らかの種類のロガー機能を使用して、内部的にconsole.logそれは、どの行がそれを起動したのかわからないからです。たぶん、try/catchを使用しただけかもしれませんが、私のログは非常に一般的であり、コードでtry/catchを使用したくありません。

あなたは何をお勧めします?

45
vsync

最近では、2014年に [〜#〜] gulp [〜#〜] を使用します(そして、すべての人にお勧めします。素晴らしいツールです)。 stripDebug と呼ばれるパッケージをインストールしてあります。

(本番環境ではuglifyclosureCompilerも使用しています)


更新(2019年6月20日)

すべてのconsoleステートメントを自動的に削除する Babel Macro があります。

https://www.npmjs.com/package/dev-console.macro

14
vsync

JavaScriptの short-circuiting の性質を 論理AND演算子 を悪用して、次のインスタンスを置き換えます。

_console.log("Foo.");
_

と:

_DEBUG && console.log("Foo.");
_

DEBUGはグローバル変数であり、デバッグが有効な場合はtrueと評価されます。

この戦略はconsole.log()の去勢を回避するので、本当に必要な場合はリリースモードで呼び出すことができます(たとえば、デバッグモードでは発生しない問題を追跡するため)。

50

Console.logを本番用の空の関数に置き換えるだけです。

if (!DEBUG_MODE_ON) {
    console = console || {};
    console.log = function(){};
}
45
bjornd

一般的に、グローバル関数を破壊することは悪い考えです。

代わりに、コード内のconsole.logのすべてのインスタンスをLOGで置き換え、コードの先頭で実行できます。

var LOG = debug ? console.log.bind(console) : function () {};

これにより、正しい行番号が表示され、必要に応じてサードパーティのものに対して予想されるconsole.log関数も保持されます。

29
namuol

本番環境でconsole.logを無効にして開発中に保持するもう1つの方法。

// overriding console.log in production
if(window.location.Host.indexOf('localhost:9000') < 0) {
    console.log = function(){};
}

ローカルホストやポートなどの開発設定を変更できます。

4
vinesh

シンプル。

console.logへのすべての参照を見つけて削除する小さなbashスクリプトを追加します。

このバッチスクリプトが運用環境への展開の一部として実行されることを確認してください。

console.logを空の関数としてシムアウトしないでください。これは計算とスペースの無駄です。

1
Raynos

enter image description here

chromeの最新バージョンは、console.logを起動したファイルのコード行を示します。ログ管理システムを探している場合は、 logeek it表示するログのグループを制御できます。

0
Iman Mohamadi

コンソールは、ログだけでなくエラー警告などを出力できます。すべてのコンソール出力をオーバーライドする関数を次に示します。

(function () {
    var method;
    var noop = function noop() { };
    var methods = [
    'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
    'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
    'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
    'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];
        console[method] = noop;
    }
}());

詳細な投稿はこちらをご覧ください https://stapp.space/disable-javascript-console-on-production/

0
Sachin Naik
// In Development:
var debugMode = true

// In Prod:
var debugMode = false

// This function logs console messages when debugMode is true .
function debugLog(logMessage) {
    if (debugMode) {
        console.log(logMessage);
    }
}

// Use the function instead of console.log
debugLog("This is a debug message");
0
deepakssn

この小さなラッパーオーバーライドは、元のconsole.log内部にチェックがある関数を含むメソッド。これは外部から制御でき、コンソールログを表示するかどうかを確認する場合は深めます。

私が選んだ window.allowConsoleは単なるフラグの例ですが、実際の使用ではおそらく他の何かになるでしょう。フレームワークに依存します。

(function(cl){
  console.log = function(){
    if( window.allowConsole )
      cl(...arguments); 
  }
})(console.log)

使用法:

// in development (allow logging)
window.allowConsole = true;
console.log(1,[1,2,3],{a:1});

// in production (disallow logging)
window.allowConsole = false;
console.log(1,[1,2,3],{a:1});

このオーバーライドは、発生する前にすべてのログを「キャッチ」するように、コード階層で可能な限り「高」に実装する必要があります。これは、consolewarntimeなど、他のすべてのdirメソッドに拡張できます。

0
vsync

このコードは私のために機能します:

if(console=='undefined' || !console || console==null) {
  var console = {
    log : function (string) {
        // nothing to do here!!
    }
  }
}
0