本番JavaScriptコードの「はconsole.log()」の呼び出しを残すために悪い考え?

StackOverflow https://stackoverflow.com/questions/1114187

質問

私はJavaScriptでconsole.log()呼び出しの束を持っています。

私は、生産に展開する前に、私はそれらをコメントアウトする必要がありますか?

私はちょうどそこにそれらを残したいのですが、私はそれ以上のデバッグを行う必要がある場合、私は後で再追加コメントのトラブルに行く必要はありません。これは悪い考えますか?

役に立ちましたか?

解決

これは、Javascriptがエラーを含むブロックの実行を終了、Javascriptエラーが発生します。

Firebugのがアクティブでないとき、

あなたは、しかし、何-OPませんダミー関数を定義することができます:

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

あなたはlog以外の任意の方法を使用する場合は、同様にそれらをスタブアウトする必要があります。

他のヒント

他の人としては、すでに一部のブラウザでエラーが発生しますが、これらのエラーは、いくつかのスタブを入れることで回避することができますそれを残して、それを指摘している。

しかし、私はそれらをコメントアウトしていないだろうが、完全にこれらの行を削除します。ちょうどそうやってずさんなようです。おそらく、私は知識をひけらかすことだけど、私もコメントの形で、「生産」のコードがすべてで「デバッグ」のコードを含めるべきであるとは思いません。あなたがまったくでコメントを残している場合、それらのコメントは、コードが何をしているのかを説明、または必要があり、それの背後にある理由 - 障害コードのないブロック。 (右、ほとんどのコメントがあなたの縮小プロセスによって自動的に削除されなければならない。あなたが最小化されている、けれども?)

また、JavaScriptでの作業の数年間で、私は関数に戻ってくると言って、これまで思い出すことができない「うわあ、私は私はここの場所でそれらのconsole.logsを残したいたいです!」一般的に、私は機能に取り組んで「完了」だ、と後でそれに戻って来ているとき、私は他のいくつかの問題を解決するために戻って来ています。その新たな問題があるものは何でも仕事の前のラウンドからconsole.logsは役に立ちされている可能性があれば、私はこの問題を最初に発見してきたと思います。私は戻って何かに来る言い換えれば、私は以前の場面で必要に応じて正確に同じデバッグ情報を必要とする可能性はないよ。

ちょうど私の2セント...グッドラック!

あなたが展開スクリプトを使用している場合は、

、あなたははconsole.log(およびファイルを縮小化)への呼び出しを取り除くためにそれを使用することができます。

あなたがそれに取り組んでいる一方で、

、あなたはJSLintを通して、あなたのJSを投げると検査のための違反をログに記録(または展開を防ぐ)ことができます。

これは、あなたの展開を自動化したい理由の良い例です。あなたのプロセスは、あなたがそれでconsole.logsとJSファイルを公開することを可能にする場合は、いくつかの点では、<全角> はそれを行います。

私の知る限りでは、以下の45文字を超えるconsole.logをスタブのない短い方法はありません

window.console||(console={log:function(){}});

それはあなたがそれらのすべてが小さなあるスタブアウトしたいコンソール方法に応じて、3種類のバージョンの最初のだとすべてがIE6 +、近代的なブラウザでテストされています。

他の2つのバージョンが他のコンソール方法を変化させるカバー。一つは、4つの基本をカバーし、他は放火魔とwebkitのためのすべての既知のコンソール方法をカバーしています。ここでも、最も小さいファイルで可能なサイズます。

そのプロジェクトはgithubの上にある: https://github.com/andyet/ConsoleDummy.js

あなたは、さらにコードを最小限にするためにどのような方法を考えることができた場合は、

、貢献が歓迎されています。

- EDIT - 2012年5月16日

私は、以来、このコードに改善しました。それはまだ小さなだが、オンとオフのコンソール出力をオンにする機能を追加します: https://github.com/HenrikJoreteg/andlog

これは変更履歴で紹介されました

を表示
あなたのコードがインストールされて放火犯ずにユーザーのマシン上のエラーをスローされませんので、オブジェクトが存在しない場合は、

あなたは、少なくともダミーconsole.logを作成する必要があります。

別の可能性としては唯一の「デバッグモード」、すなわち特定のフラグが設定されている場合、ログイントリガするだろう

if(_debug) console.log('foo');
_debug && console.log('foo');

は、それが誰かの役に立てば幸い - 私は受け入れソリューションよりもそのもう少し柔軟、しばらく前にそれのためのラッパーを書いた。

。 あなたは、このようなconsole.infoなどのような他の方法を使用する場合は、

もちろん、あなたが効果を複製することができます。ステージング環境で行われたときに、単に生産のためにfalseにデフォルトC.debugを変更し、あなたが他のコードを変更する必要はありません/後で非常に戻って来やすいとデバッグラインアウトなどを取ります。

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

これは私のために働くようだ...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

私は別の視点を共有すると考えました。 PCIアプリケーションで外の世界に見えるこのタイプの出力のままにすると、あなたは非対応になります。

私は、コンソールスタブは良い方法であることに同意します。私はいくつかのかなり複雑なものも含めて、さまざまなコンソールプラグイン、コードスニペットを、試してみました。彼らは皆、少なくとも一つのブラウザでいくつかの問題を抱えていたので、私は他の私が見てきたスニペットやYUIチームからいくつかの提案の合併で、以下のような単純な何か、一緒に行くことになりました。 (Windowsの場合)IE8 +、Firefoxの、ChromeとSafariで機能するように表示されます。

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

注:これは、フラグを経由して、コンソールへのロギングを無効にすることをサポートしています。おそらく、あなたはあまりにもビルドスクリプトを経由して、これを自動化することができます。また、あなたは、UIや実行時に、このフラグを反転するためにいくつかの他のメカニズムを公開することができます。あなたは(例えば、すべてのエラー・レベルの文がなどが保管のためにサーバに送信されている。)、ログレベルと、ログのしきい値に基づいてログのAJAX提出をはるかに洗練されたコースを取得することができます。

ログの周りにこれらのスレッド/質問の多くは、デバッグコードではなく、コードの の計測のようログステートメントを考えているようです。したがって、ログ文を削除したいです。アプリケーションが野生であり、それはデバッガをアタッチすることはもはや同じくらい簡単だんや情報がユーザーからやサポートを経由して、あなたに供給されたときにインストルメンテーションは極めて有用です。あなたは関係なく、プライバシー/セキュリティが損なわれてはならないので、それが記録されていますどこの、敏感な何かをログに記録することはありません。あなたは計装などのログを考えたら、それは今、生産コードになり、同じ標準に記述する必要があります。

私は計測が重要であると考え、これまで以上に複雑なJavaScriptを使用しているアプリケーションでます。

他に持っているように、それはほとんどのブラウザでエラーがスローされます言及しています。 Firefoxの4では、それはエラーがスローされません、メッセージがウェブデベロッパーコンソール(Firefoxの4の新機能)に記録されます。

私は本当に気に入って、このようなミス1つの回避策だったデ&&バグするます:

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

素敵なワンライナーます:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top