5

google-closureライブラリには、ほとんどの開発者に馴染みのあるロギングシステムも含まれています。これはいいね。console.log残念ながら、一部のブラウザ/プラグインで利用できるように使用した場合のように、得られる出力は表現力に欠けます。

たとえばconsole.log(window)、Chromeで作成した場合、コンソールにはインタラクティブに検査できるオブジェクトが表示されます。google-closure loggerを使用する場合、それは行われません。内部的には、オブジェクトの文字列表現をに渡すだけだと思いますconsole.log。だからあなたは多くの便利さを失います。

このため、私はまだ使用し続けていますconsole.log。しかし、運が悪ければ、本番コードからコードを削除するのを忘れると、コードがないブラウザーconsole.log(例:IE)でコードが壊れてしまいます。

または、最初に存在を確認することで、これを防ぐことができます。次に例を示します。

window.console && window.console.log && console.log(...)

また:

if (DEBUG) {
    console.log(...)
}

しかし、どちらのソリューションも完璧にはほど遠いです。また、ライブラリロギングフレームワークがあることを考えると、それを使用できると便利です。今のところ、私はconsole.log時々もっと便利だと思います。

だから私の質問(tl / dr):文字列表現を使用する代わりconsole.log(x)に書くときにgoogle-closureユーザーを作ることはできますか?myLogger.info(x)x

4

2 に答える 2

5

goog.debug.FancyWindowを使用して、ログを表示するための別のウィンドウを作成することもできます。詳細については、Googleのクロージャーデモページ(https://github.com/google/closure-library/blob/master/closure/goog/demos/debug.html)を参照し、ソースコードを確認してください。

コンソールロギングを使用している場合のもう1つの利点は、フレームワークがモジュール名と時刻を自動的に追加することです...コンソールロギングを使用するには、次の行を追加するだけです。

goog.require('goog.debug.Console');

if (goog.DEBUG) {
    debugConsole = new goog.debug.Console;
    debugConsole.setCapturing(true);
}

これにより、本番コードでコンソールログが表示されなくなります。

よろしく、

レネ

于 2012-06-25T11:54:49.283 に答える
2

Google Closureは、必要に応じて情報を提供できます。関数あり、オブジェクトの関数なし。以下のコードスニペットを参照してください。

 goog.require('goog.debug');
 goog.require('goog.debug.Logger');

 var theLogger = goog.debug.Logger.getLogger('demo');
 theLogger.info('Logging examples');

 // Create a simple object.
 var someone = {
     'name': 'peder',
         'age': 33,
         'gender': 'm',
         'kids': ['hari', 'sam', 'sneha']
 };

 // Show the object, note that it will output '[object Object]'.
 theLogger.info(someone);

 // Use expose to walk through the object and show all data.
 theLogger.info('Person: ' + goog.debug.expose(someone));


 // Does not show the functions by default.
 theLogger.info('expose (no functions): ' + goog.debug.expose(yourObject));


 // Shows the functions as well.
 theLogger.info('expose (w/functions): ' + goog.debug.expose(yourObject, true));

 // Show deepExpose, which walks recursively through data.
 theLogger.info('deepExpose (no functions): ' + goog.debug.deepExpose(yourObject));

 theLogger.info('deepExpose (w/functions): ' + goog.debug.deepExpose(yourObject, true));
于 2013-12-31T07:14:30.507 に答える