0

私の同僚の 1 人がロガーを使用していましたが、ロガーを呼び出す前に "is-loggable" テストを配置するのを忘れていた非常に大きなプロジェクトがあります。ただし、一部のロガーは適切に保護されています。

保護されていないすべてのロガー呼び出しを検索するために Eclipse で使用できる正規表現を探していますが、それを行うための否定的な後読みで適切な正規表現を見つけることができません。

これを明確にするためのサンプルを次に示します。

私はこれを一致させたい:

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))たが、一致させたくないものに一致します。これをどのように修正できるかについてのアイデアはありますか?

コードはフォーマットされています (インデントはタブで行われます)。

4

1 に答える 1

1

これを試してみてください:

(?<!if\s?\(logger\.isLoggable[^\n]{0,20}\n\s{0,20})logger\.fine

説明:

(?<!         # open negative lookbehind
if\s?\(logger\.isLoggable  # look for your if statement
[^\n]{0,20}  # then gobble up a bunch of characters ...
\n           # ... up to the end of the line
\s{0,20}     # optional whitespace at the beginning of the next line
)            # close the look behind
logger\.fine # now, is logger.fine there?
于 2012-04-30T10:31:30.033 に答える