Q1:速度優先でログ出力するためには?

コストのかかる変換パターン記号を使わない

PatternLayout に使用できる変換パターン記号にはコストの非常にかかるものがあります。速度優先でログ出力したい場合は、それらを使用しないことによって性能を大幅に改善できる可能性があります。

特に以下の変換パターン記号は注意してください。

変換パターン記号 説明 相対的な速度
%C クラス名 遅い
%F ソースファイル名 非常に遅い
%l 出力位置の情報(クラス名, ソースファイル名, 行番号) 非常に遅い
%L 行番号 非常に遅い
%M メソッド名 非常に遅い

尚、これら変換パターン記号は、一つ含まれていても二つ以上含まれていてもそれほど速度に差がでません(出力文字数が増加することによる速度低下はありますが)。例えば上記のうちの 2 つを使用しており、そのうちの一つを削除しても、速度が1/2になるわけではないということに注意して下さい。

速度優先で出力する場合は、大文字の変換パターン記号と %l を完全に排除して下さい

isXXXEnabled() メソッドでログ出力対象かどうかを判断する

以下のコードがあった場合、

logger.info(i + "INFO Message");

例えログ出力対象レベルが WARN 以上だったとしても、"INFO Message"オブジェクトの生成と文字列の連結処理が実行されてしまうため、その分非効率です(ログ自体は出力されません)。このコストが気になる場合は、

if (logger.isInfoEnaled()) {
    logger.info(i + "INFO Message");
}

として、出力対象レベルかどうかを判定する処理を行い、無駄な処理が実行されることを防ぎます。


トップページへ戻る