2011-02-09 26 views
0

私は常に最初のパラメータとしてthis.getClass().getSimpleName()を使用するlog文を持っています。 これをある種のマクロ定数に入れて、私のすべてのログステートメントで使用したいと思います。 しかし、私はJavaにC++とは違う単純な仕組みがないことを知りました。Javaのマクロ置換の代替手段

Javaでこの種の機能を実現する最良の方法は何ですか? (アンドロイドから)

私の例のログステートメント次のように..です

Log.v(this.getClass().getSimpleName(),"Starting LocIden service..."); 
+0

デバッグの目的でこれらのステートメントを作成していますか?もしそうなら、デバッガツールはログを避けるのに役立ちませんか? – jzd

答えて

5

Javaは、マクロを持っていませんが、あなたはあなたのコードは非常に短くすることができます。

Log.v(this, "Starting LocIden service..."); 

そしてLogでクラス:

public void v(Object object, String s) 
{ 
    _v(object.getClass().getSimpleName(), s); 
} 

もう1つのアプローチは、コールスタックを検査することです。

+0

ありがとうございました。それはもっときれいです:-) – Karthik

0

もう1つのアプローチは、アンドロイドのロギング機能の示唆に従うことです。

Log.v(TAG, "Message"); 

ここで、TAGは、クラス内のプライベート静的最終文字列です。

+0

これは私の最初のアプローチでしたが、私はクラス名を直接使うことができると思っていましたが、この質問がポップアップしました:) – Karthik

+0

静的な最終文字列メソッドが好きです。あなたがクラスの名前以外のものにしたいならば、あなたはそれを非常に簡単に変更することができます。 – Falmarri

+0

私もここでマクロ置換のようなものを実現する方法があるのか​​どうかを知りたかっただけです。そうすれば、すべてのクラスで汎用コールを使用できます。 – Karthik

0

適切なログフレームワーク(例:slf4j)を使用します。ログに記録される各クラスには固有のロガーがあるため、クラス名をログメソッド呼び出しに渡す必要はありません。

Logger logger = LoggerFactory.getLogger(this.getClass()); 

logger.debug("Starting service"); 
//... 
logger.debug("Service started"); 
1

カルティク、ほとんどのロギングツールを使用すると、出力の形式を指定することができますし、パラメータの一つは、log4jの中で、例えばマークが言及したメソッドを使用して、クラス名、(スタックの検査)

ですクラス名を参照するパラメータは%Cです。

+0

返信ありがとうございました。私はロギング目的でAndroid SDKの「ログ」ユーティリティを使用していました。この特定の機能を直接利用することはできません。 – Karthik