Q9:通常のログ出力と AspectJ によるログ出力の性能差は?

パターンA

パターンB

結果

以下のような結果になりました(単位:ミリ秒)

  パターンA パターンB
通常のログ出力(with Log4j) 109 1515
AspectJによるログ出力(with Log4j) 313 359

パターンAではログ出力フォーマットをシンプルにし、通常のログ出力の場合と AspectJ によるログ出力で同じ log4j.xml を使用しました。AspectJ によるログ出力では、通常のログ出力より約 3 倍遅い結果がでました。やはり AspectJ のライブラリを使用することによるオーバヘッドがあるようです。

次にパターンBでは、メソッド名の出力方法が、Log4j の変換パターン記号と、AspectJ の thisJoinPoint から得られる情報を使用したかどうかの差が大きくでました。Log4j では行番号といった情報も取得するために、内部的に例外をスローしてスタックトレースを取得することを行っています。そのために AspectJ の thisJoinPoint からの取得と比べて時間がかかるのかもしれません。

AspectJ のライブラリを使用するため、他と比べて遅くなってしまう印象がありましたが、必ずしもそうではないようです。場合によっては非常に有効な手段になると思いますので、知っておいて損はないと思います。


トップページへ戻る