logのレベル設定方法
StrutsなりHibernateなりいろいろなライブラリがjakarta-commons-loggingに対応しています*1。commons-loggingは使用する下位のロギングAPIが何であっても共通的にログが取れます。
これはこれでいいのですが、いかんせん、commons-loggingはログレベルの設定機能をサポートしていません。ログの量・詳しさが、多すぎる、とか、少なすぎる、と言う時に、設定ファイルを書き換えてログのレベルを設定する方法は、ロギングAPIの方法によってまちまちで、結構わかりずらく、初めて使うときには混乱してしまいます。
commons-logは設定がないときには、使えるログAPIが何があるか自動的に探します*2。commons-loggingはLog4jと相性がいいようなので、ここではまずLog4jが使えるようになっている(CLASSPATH内にlog4j.jarがある)事を前提に設定して見ます。
Log4jの場合の設定
CLASSPATHには、、、commons-logging-xxx.jar log4j-xxx.jar
プロパティファイルの置き場所には、、、
log4j.properties もしくは commons-logging.properties
を用意します。
実際のログレベルの設定は、log4j.properties の中に、、、
log4j.rootCategory=XXXX, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Target = System.out log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d %C : %m %n
と書きます。
この一行目のXXXXの部分がディフォールトのログレベルの設定で、commons-loggingの設定と同じく、DEBUG, INFO, WARN, ERROR, FATALの5つが使えます。
ログレベルを特定のパッケージにのみ設定したい場合には、、、
log4j.category.net.sf.hibernate=DEBUG
のように、頭に「log4j.category.」を付けてパッケージ名を指定すれば、それ以下のパッケージ(上の例では「net.sf.hibernate」)のログレベルだけを設定できます。
JDK1.4ロギングの場合の設定
JDK1.4に標準で含まれているロギングAPI(パッケージ java.util.logging)は、少々Log4jよりは使いづらそうです。(http://www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs-ja/critique.html )
CLASSPATHにはcommons-logging-xxx.jarだけがあればいいですが、設定ファイルはJavaシステム全体の物を使います。(注:他の方法を見つけられなかった。FIXME)。設定ファイルは、Javaシステムディレクトリ内の、jre/lib/logging.properties ファイルを使用します。
設定は以下の2点を変更します。
#.level= INFO .level= ALL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
上の物は、標準のログレベルを設定します。下の方は、設定されているコンソール用のConsoleHandlerが、標準ではINFO以上のログをフィルターしているのを変更しています。
設定できるログレベルは、commons-loggingのものとは少々異なり、SEVERE(=OFF)、WARNING、INFO、CONFIG、FINE、FINER、FINEST(=ALL)の7つが設定できます。
ログレベルを特定のパッケージにのみ設定したい場合には、同じくjre/lib/logging.properties ファイルの一番最後に、「パッケージ名+.level」と言うプロパティを設定します、、
net.sf.hibernate.level = ALL
とすると、「net.sf.hibernate」以下のパッケージのログレベルを「ALL」に設定できます。
メモ: commons-logのログAPI検索方法
commons-logは以下の順序でログ先を検索するようです。1: 設定ファイル
まず、設定ファイルにorg.apache.commons.logging.Logがあればそこに指定してある物を使います。2: システム・プロパティ
次に、システム・プロパティにorg.apache.commons.logging.Logがあればそこに指定してある物を使います。3: Log4j
そして、log4j.jarがCLASSPATHにあればLog4jを使います。(今回の説明はこれを使っています。)4: JDK 1.4
次に、JDK 1.4以上の場合には標準のJDKログを使います。5: SimpleLog
最後に見つからないときには内臓のSimpleLogを使います。