デバッグしていないときにconsole.logを無効にするにはどうすればよいですか?
私はたくさん持ってる console.log
(または他のコンソール呼び出し)で、アプリが何らかの種類の"デバッグモード"の場合にのみ使用したい。
何らかの種類のロガー機能を使用して、内部的にconsole.log
それは、どの行がそれを起動したのかわからないからです。たぶん、try/catchを使用しただけかもしれませんが、私のログは非常に一般的であり、コードでtry/catchを使用したくありません。
あなたは何をお勧めします?
最近では、2014年に [〜#〜] gulp [〜#〜] を使用します(そして、すべての人にお勧めします。素晴らしいツールです)。 stripDebug と呼ばれるパッケージをインストールしてあります。
(本番環境ではuglify
とclosureCompiler
も使用しています)
更新(2019年6月20日)
すべてのconsole
ステートメントを自動的に削除する Babel Macro があります。
JavaScriptの short-circuiting の性質を 論理AND演算子 を悪用して、次のインスタンスを置き換えます。
_console.log("Foo.");
_
と:
_DEBUG && console.log("Foo.");
_
DEBUG
はグローバル変数であり、デバッグが有効な場合はtrue
と評価されます。
この戦略はconsole.log()
の去勢を回避するので、本当に必要な場合はリリースモードで呼び出すことができます(たとえば、デバッグモードでは発生しない問題を追跡するため)。
Console.logを本番用の空の関数に置き換えるだけです。
if (!DEBUG_MODE_ON) {
console = console || {};
console.log = function(){};
}
一般的に、グローバル関数を破壊することは悪い考えです。
代わりに、コード内のconsole.log
のすべてのインスタンスをLOG
で置き換え、コードの先頭で実行できます。
var LOG = debug ? console.log.bind(console) : function () {};
これにより、正しい行番号が表示され、必要に応じてサードパーティのものに対して予想されるconsole.log
関数も保持されます。
本番環境でconsole.logを無効にして開発中に保持するもう1つの方法。
// overriding console.log in production
if(window.location.Host.indexOf('localhost:9000') < 0) {
console.log = function(){};
}
ローカルホストやポートなどの開発設定を変更できます。
シンプル。
console.log
へのすべての参照を見つけて削除する小さなbashスクリプトを追加します。
このバッチスクリプトが運用環境への展開の一部として実行されることを確認してください。
console.log
を空の関数としてシムアウトしないでください。これは計算とスペースの無駄です。
chromeの最新バージョンは、console.logを起動したファイルのコード行を示します。ログ管理システムを探している場合は、 logeek it表示するログのグループを制御できます。
コンソールは、ログだけでなくエラー警告などを出力できます。すべてのコンソール出力をオーバーライドする関数を次に示します。
(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/
// 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");
この小さなラッパーオーバーライドは、元の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});
このオーバーライドは、発生する前にすべてのログを「キャッチ」するように、コード階層で可能な限り「高」に実装する必要があります。これは、console
、warn
、time
など、他のすべてのdir
メソッドに拡張できます。
このコードは私のために機能します:
if(console=='undefined' || !console || console==null) {
var console = {
log : function (string) {
// nothing to do here!!
}
}
}