Q2:ログイベントをバッファリングするには?

AsyncAppender によってログイベントをバッファリングし、バッファが満杯になったら非同期でログ出力することができます。

  <appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
    <param name="BufferSize" value="64" />
    <appender-ref ref="FOR_LOG4J_PERFORMANCE" />
  </appender>

AsyncAppender は他のアペンダを非同期化するためのアペンダで、上の例では appender-ref 要素で非同期化するアペンダを指定しています。尚、この記述は XML ファイルでしかできません。BufferSize パラメータはログイベントのバッファサイズです。デフォルト設定は 128 です。

ただしこの方法を実際に試したところ、以下の問題がありました(使い方の問題かもしれませんが)。

また、org.apache.log4j.performance.Logging クラスの Javadoc にもあるように、(2006/08/10 修正。log4j 1.2.13 では Logging クラスが無くなっている。)必ずしも AsyncAppender を使ったほうが早くなるわけではなく、逆に遅くなることもあるようです。ファイル I/O よりも一度のログ出力に時間のかかる、ネットワーク経由でログを出力するタイプのアペンダには有効かもしれません。


トップページへ戻る