私は、ロガーを使用していたがロガーを起動する前に "is-loggable"テストを実行するのを忘れたかなり大きなプロジェクトを持っています。ログメッセージの連結。ただし、一部のロガーは適切に保護されています。regexpsで保護されていないロガーを検索する
私はこれらの保護されていないロガー呼び出しをすべて検索するためにEclipseで使うことができる正規表現を探していますが、それを行うためのネガティブなlookbehindで適切なregexpを見つけることができません。ここで
が、これは明確にするためにいくつかのサンプルです:
私はこれを一致させたい:
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
私はこれと一致したくない:
if (logger.isLoggable(Level.FINE)) {
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
}
もこの:
をif (logger.isLoggable(Level.FINE))
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
私は気にしませんメッセージの内容や、ロガーメソッドコール(severe()、warning()、...)に続くものを照合するには、logger.fine
部分が必要です。
これまで私はこの正規表現を使用しました: ((?<!if\s?.?logger\.isLoggable.?Level.{0,20})logger.(severe|warning|info|fine|finer|finest))
しかし、私は一致したくないものにマッチします。これがどのように修正されるかに関する考え方は?
コードは書式設定されています(インデントはタブで行われます)。これは、私たちの期待にかなり厳しくなる可能性があることを意味します。
誰もlogger.warning' '周りにチェックを入れません。コードに実際にパフォーマンスが心配しているような警告ログがたくさんある場合は、再考する必要があります。 – adarshr
@adarshr警告のために十分な公正ですが、私はそれらの細かい、細かくそして最高の方法にもっと興味があります。このプロジェクトは500,000以上の回線があるため、相当なものになる可能性があります。 –
正規表現がもはや正しいツールではない複雑さのポイントを渡したと思います。 http://code.google.com/p/javaparser/wiki/UsingThisParserのようなjavaパーサーをお勧めします。数行のコードで、これはコードベースのlogger.warning()/ fine()/ ...の呼び出しをすべて訪れ、適切な 'if'ブロック内にあるかどうかをチェックします。お役に立てれば。 – laher