ショートバージョン:ブールのisDebugEnabled()チェックを実行することもできます。
理由:
1-複雑なロジック/文字列連結の場合。がデバッグ文に追加され、すでにチェックが行われています。
2-「複雑な」デバッグステートメントにステートメントを選択的に含める必要はありません。すべてのステートメントはそのように含まれています。
3- log.debugを呼び出すと、ロギングの前に以下が実行されます。
if(repository.isDisabled(Level.DEBUG_INT))
return;
これは基本的にログの呼び出しと同じです。または猫。isDebugEnabled()。
しかしながら!これは、log4j開発者が考えていることです(Javadocにあり、おそらくそれに従う必要があります)。
これが方法です
public
boolean isDebugEnabled() {
if(repository.isDisabled( Level.DEBUG_INT))
return false;
return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}
これはそのためのjavadocです
/**
* Check whether this category is enabled for the <code>DEBUG</code>
* Level.
*
* <p> This function is intended to lessen the computational cost of
* disabled log debug statements.
*
* <p> For some <code>cat</code> Category object, when you write,
* <pre>
* cat.debug("This is entry number: " + i );
* </pre>
*
* <p>You incur the cost constructing the message, concatenatiion in
* this case, regardless of whether the message is logged or not.
*
* <p>If you are worried about speed, then you should write
* <pre>
* if(cat.isDebugEnabled()) {
* cat.debug("This is entry number: " + i );
* }
* </pre>
*
* <p>This way you will not incur the cost of parameter
* construction if debugging is disabled for <code>cat</code>. On
* the other hand, if the <code>cat</code> is debug enabled, you
* will incur the cost of evaluating whether the category is debug
* enabled twice. Once in <code>isDebugEnabled</code> and once in
* the <code>debug</code>. This is an insignificant overhead
* since evaluating a category takes about 1%% of the time it
* takes to actually log.
*
* @return boolean - <code>true</code> if this category is debug
* enabled, <code>false</code> otherwise.
* */