Commons Logging によるログ出力


Commons Logging によるログ出力

Logging - Users Guide によると Commons で Log4j を使うためには commons-logging.properties に org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger の記述を付け加えるといいと書かれています。また log4j のプロパティは log4j.properties というファイルに置くようです。サンプルの log4j.properties を 参考にしながら設定していきます。

src/commons-logging.properties を作成してプロジェクトの再ビルド を実行すると classes 以下に commons-logging.properties が作成されます。

commons-logging.properties

###############################################################################
#
#  name:  commons-logging.properties
#  desc:  ログ関連の設定を行う
#
###############################################################################

# SimpleLog を使う場合
# org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

# Log4j を使う場合
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

log4j.properties

###############################################################################
#
#  name:  log4j.properties
#  desc:  ログ関連の設定を行う
#
###############################################################################

# デフォルトのログレベル、有効な appender の設定
#
# rootLogger の Priority は各クラスの設定より優先されます。つまり
# rootLogger の Priority < 各クラスの Priority になっていないとロ
# グが出力されないので通常 rootLogger の Priority 設定は DEBUG に
# しておく必要があるでしょう。そのままだと struts や commons のロ
# グが大量に出力されてしまうのでそれらを除去する設定もいるかとおも
# います。
# Console appender を取り除くためには stdout を削ります
#log4j.rootLogger=INFO, stdout, lab
log4j.rootLogger=WARN, stdout, lab

# Console appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d(%C{1}:%M) %m%n

# lab appender
log4j.appender.lab=org.apache.log4j.FileAppender
# 自動的に切り替わるようにするためには以下を有効にしてください
#log4j.appender.lab=org.apache.log4j.RollingFileAppender
#log4j.appender.lab.MaxFileSize=5MB
#log4j.appender.lab.MaxBackupIndex=3
# パス名を指定しないと以下の場所に作成されます
# Windows と UNIX で同じ log4j.properties を使用できるようにするため
# にはパス名を書かない方がいいでしょう
#  Apache   --- 起動したパス c:\jakarta-tomcat-4.1.31\bin
#  WebLogic --- 
log4j.appender.lab.file=lab.log
# ログのパターン
log4j.appender.lab.layout=org.apache.log4j.PatternLayout
# バッチ向け、スレッド表示なし
#log4j.appender.lab.layout.ConversionPattern=%d %-5p (%C{1}:%M) %m%n
# Webアプリ向け、スレッド表示付き
log4j.appender.lab.layout.ConversionPattern=%d %-5p [%t](%C{1}:%M) %m%n

#
# Struts のログ設定
#
# Struts には Commons も複数含まれているため org.apache.struts だけ
# だと大量に表示されてしまいます。
# category によるレベル指定は rootLogger のレベルよりも上げることは
# できますが下げることはできません。rootLogger が DEBUG で categoty
# で INFO にしても DEBUG として扱われ大量にメッセージが出力されます。
# このときは rootLogger を INFO にして DEBUG を出したいユーザアプリ
# のみを DEBUG にしてください
#
log4j.category.org.apache=INFO

# 各クラスの設定
log4j.category.org.flnet.tantau.lab=DEBUG
log4j.category.org.flnet.tantau.lab.InitParam=DEBUG
log4j.category.org.flnet.tantau.lab.InputAction=DEBUG
log4j.category.org.flnet.tantau.lab.QueryAction=INFO

log4j.category によってクラス単位でログレベルの制御ができます。 パフォーマンスを気にするならコメントにしてでも 後の人にこの仕組みがあることが分かるようにあらかじめ log4j.properties に category の設定を残しておくようにしましょう。

log4j.properties のコメントにも書きましたがなぜか category による レベル指定は rootLogger のレベルよりも上げる(より詳細にする)ことは できますが下げる(減らす)ことはできません。 rootLogger が DEBUG で categoty でより少ない INFO にしても DEBUG として扱われてしまい、大量の DEBUG メッセージが出力されます。 このときは rootLogger を INFO にして DEBUG を出したいユーザアプリ のみを DEBUG にして回避したのですがこれはわたしだけなのでしょうか。 不思議です。今度ドキュメントとソースを探してみたいとおもいます。



Return to TOP