2009-04-20 12 views
3

私のコードベースでAPI(私の場合はjava.util.Logging)へのすべての呼び出しをコメントアウトしたいと思います。簡単にこれを実現する良いライブラリがありますか? 私はEclipse ASTParserを試しましたが、Eclipseに縛られています。私は現在、PMDのパーサと闘っています。私はまだそれを見ていないが、ジャックポットはこれを行うことができますか?その他の提案はありますか?Javaソースコード内の特定のAPIへの呼び出しをコメントアウトする方法

+0

私はこれを何年も使っていないので、これを "本当の"答えにするつもりはありませんが、Java文法を持ち、ASTノードのコメントをサポートしているANTLRもチェックアウトできます。自分のPMDルールを稼働させることは決して大したことではありませんでしたが、PMD自体ではなくEclipse統合を責めています。 – erickson

答えて

2

あなたはこのコメントアウトしたい場合:

Log.doLog("Here is a" /* With a block comment to make it hard */ 
    + " multiline log statement" 
    ); doSomethingEssential(); 

をあなたには、いくつかの場所のコメントを置くために知っておく延長にコードを解析する必要があると思いますので、あなたはそれのトリッキー時間を持っていると思います。私。代わりにこれを行うには

// Log.doLog("Here is a" /* With a block comment to make it hard */ 
//  + " multiline log statement" 
// ); // Line break inserted here 
doSomethingEssential(); 

それははるかに些細です:あなたはこれを行うことができるようにしたい

if (false) Log.doLog("Here is a" /* With a block comment to make it hard */ 
    + " multiline log statement" 
    ); 

を一部のコンパイラおよびログ文がアウトに最適化されてしまう「偽の場合」最終的な.classファイルにはなりません。

そのように、あなたが必要とするすべてのコードのトリッキーな解析に頼ることなく

"if (false) Log.doLog(" or 
"if (true) Log.doLog(" 

どちらかと

"Log.doLog(" 

のすべての出現箇所を置き換えるビルドスクリプトのステップを検索/置換です。

+0

izb、私はこのソリューションを使用して終了しました。私はこの変更を行うためにsedを使いました。手元にある議論に何も追加しない、役に立たない、ユーモラスではあるが不自然な、不思議なコメントを作るのではなく、この解決策を書く時間をとってくれてありがとう。 :-) –

0

sed?コメント行で置き換えてください。複数行の呼び出しをキャッチするには、正規表現について考える必要があります。

+0

複数行の呼び出しにマッチする良い正規表現を表示してください。 :-) –

+1

まあ、それは ';'その中に。 –

+2

';'がある可能性があります。ログに記録された文字列に今では、エスケープされた引用文字を心配し、タスクを開始することを後悔するパーサーを書いています。 – izb

4

これはあなたが求めているのではないことを知っていますが、設定ファイルにログOFFを有効にすることができます。

+0

ありがとうございましたビルは、機能的には同じものを達成していますが、それは私が何をしているかではありません。 logger.log(..)呼び出しをコメントアウトして、引数が評価されないようにしたかったのです。 –

+0

問題ありません。私はいつもそれを削除するよりむしろこれを残すつもりです。 –

0

slf4jのjul-to-slf4jモジュールを使用すると、すべてのjava.util.logging呼び出しをslf4jにリダイレクトできます。次に、slf4j-nopモジュールを選択してすべてのロギングステートメントを無視できます。

これが実行するのですか、本当にこれらのソース行を削除する必要はありますか?

0

ツールを使用してすべてのログコードをコメントアウトまたは削除することは悪い考えかもしれません。

あなたが気づかない副作用のコードがある場合があります:

while (x > 5) 
{ 
    // some code here 
    Logger.global.finest("X is now bigger: " + (x++)); 
} 

は本当の明白な例のthatsが、それはロガーコール内部のメソッド呼び出しか何かと非常に微妙である可能性があります。

あなたがあなたのコメントで言うように、引数の評価を避けるために探している場合は、私が想定し...ログ出力をオフにし、または手動で全部を通過し、おそらく

+0

これがあなたのコードにある場合、あなたは副作用に値します;-) – Robin

0

安全です

logger.log("Expensive toString() operation on " + this); 

を無効にしますか?

それが事実だし、それはあなたのコードを散在いた場合、私は上記のすべてのインスタンスを囲むようにAspectJのようなものを使用したい:

if (loggingEnabled) { 
    ... 
} 

とfalseにloggingEnabledフラグを設定します。

+0

*なぜ*誰かがこれを投票したのを知ってうれしいですか? –

関連する問題