2012-06-25 10 views
5

google-closureライブラリには、ほとんどの開発者にとって馴染み深いlogging systemも含まれています。これはいいね。残念ながら、一部のブラウザ/プラグインで利用可能になったようにconsole.logを使用した場合のように表現力が低下します。`goog.debug.Logger`(` console.log`など)の出力を改善できますか?

たとえば、Chromeにconsole.log(window)と書き込むと、コンソールに対話形式で検査できるオブジェクトが表示されます。 google-closure loggerを使用している場合、それは実行されません。内部的にオブジェクトの文字列表現をconsole.logに渡すと仮定します。だからあなたは多くの利便性を失う。

このため、私はまだconsole.logを引き続き使用しています。しかし、運が悪い場合は、それを実動コードから削除することを忘れてしまい、console.log(f.ex .: IE)を持たないブラウザでコードが破損する可能性があります。

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

か::

あるいは、例えば、最初の有無をチェックすることによって、これを防ぐことが可能である

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

しかし、両方のソリューションは完璧にはほど遠いです。そして、ライブラリにはロギングフレームワークがあるので、それを使用できるのは良いことです。今のところ、私はconsole.logがはるかに便利であることがわかります。

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

答えて

5

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

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

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

この:

あなただけのコンソールロギングを使用している場合は、別の利点は、フレームワークが自動的にジャストコンソールロギングを使用するようにfolowingの行を追加...モジュール名と時間を付加することですプロダクションコードにコンソールログを表示することも防止します。

よろしく、

ルネ

+0

重要なビットは 'goog.debug.expose'ました。私は最初にログフレームワークのドキュメントを見ていたときにそれを逃しました!対話的な 'console.log'ダンプほど便利ではありませんが、ほとんどの場合、これはうまくいくでしょう。ほんとありがと! – exhuma

+0

この回答のコードがエラーを引き起こすのではないかと心配しています。あなたが 'goog.require ... 'をインポートした直後に' goog.debug.Console'を使うので、 – hguser

2

Googleの閉鎖は、あなたの必要性につきなどの情報を提供することができます。関数の場合、オブジェクトの関数なし。下記のコードスニペットを参照してください。私が探していた

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)); 
+0

'goog.debug.expose'が便利です。それでも 'console.log'から得られる出力と同じくらい有用ではありません。 – exhuma

関連する問題