LastUpdate: 2009/07/31 02:02:59
戻るLink
Log4J徹底解説
http://www.nurs.or.jp/~sug/soft/log4j/index.htm
Log4j Q&A
http://www.okisoft.co.jp/esc/log4j/index.html
20051003 初期化ファイルの設定方法
20090725_Log4jのバージョン
20090725_log4jのDownLoad
20090725_とにかく動かしてみる
20090726_log4jのプロパティファイルを利用してみる
20090726_カテゴリーについて
20090726_設定ファイルの読み込み
20090726_カテゴリーの使い分け
いくつかの方法がある
-Dlog4j.configuration=file:///c:/temp/log4j.xml
-Dlog4j.configuration=file:///c:/temp/log.properties
1.1系に始まり、1.2系が一般的に使われているらしい。
1.3系のリリース予定もあったが、1.2系と互換性が無いことから、正式リリースは見送られたらしい。
http://www.nurs.or.jp/~sug/soft/log4j/index.htm
2009/07/25現在、最新版は 1.2.15である。
http://logging.apache.org/log4j/1.2/download.html
Windowsなら apache-log4j-1.2.15.zip を取得すれば良い。解凍後、log4j-1.2.15.jar をクラスパスに追加すればよいだけ
Hello.java
import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; public class Hello { static Logger logger = Logger.getLogger(Hello.class); public static void main(String argv[]) { BasicConfigurator.configure(); logger.debug("Hello world."); logger.info("What a beatiful day."); } }
0 [main] DEBUG Hello - Hello world. 0 [main] INFO Hello - What a beatiful day.
example.ExLog1.java
package example; import org.apache.log4j.*; import org.apache.log4j.xml.*; import java.io.*; //http://www.javaroad.jp/opensource/js_log4j2.htm public class ExLog1 { // (1)Loggerオブジェクトの生成 static Logger log = Logger.getLogger(ExLog1.class.getName()); public static void main(String[] args) { // (2)設定ファイルの読み込み DOMConfigurator.configure("log4j.xml"); ExLog1 obj1 = new ExLog1(); ExLog2 obj2 = new ExLog2(); obj1.methodA(); obj2.methodB(); } void methodA() { try { FileReader in = new FileReader("test.txt"); // (3) } catch (IOException e) { log.warn("エラー:" + e); // (4)warnメソッドの記述 } } }
example.ExLog2.java
package example; import org.apache.log4j.*; public class ExLog2 { //(1)Loggerオブジェクトの生成 static Logger log = Logger.getLogger(ExLog2.class.getName()); void methodB() { int x = 20; if(x > 10) { log.info("変数は10以上です。"); //(2)infoメソッドの記述 } } }log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- (1)appenderの設定 --> <appender name="FILE" class="org.apache.log4j.FileAppender"> <param name="File" value="log.txt" /> <!-- (2)layoutの設定 --> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/MM/dd} %p:%r:%c:%m%n" /> </layout> </appender> <!-- (3)categoryの設定 --> <category name="example"> <priority value="info" /> <appender-ref ref="FILE" /> </category> </log4j:configuration>log4j.xml の配置はカレントパスらしい
実行結果 log.txt
2009/07/26 WARN:0:example.ExLog1:エラー:java.io.FileNotFoundException: test.txt (指定されたファイルが見つかりません。) 2009/07/26 INFO:15:example.ExLog2:変数は10以上です。
log4j.xml の 配置場所を変えてみよう
public static void main(String[] args) { // (2)設定ファイルの読み込み DOMConfigurator.configure("c:/aaa/log4j.xml");
指定した場所XMLファイルを配置すれば、OKだったみたいだ。
Log4Jは「カテゴリー階層ロガー」と呼ばれるている。つまり、ロガーを使う時の名前が、「カテゴリー」であるが、それが「階層」になっているのが大きな特徴である。
通常は、複数のソース(クラス)で一つのアプリケーションが構築されている。その際に「チェックしたいソース(クラス)」だけをロギングするなんてことが出来るのである。とすれば、何かのサブモジュール(複数ファイル・クラス)だけをロギングできたらイイよな...と考えるのは自然で、ここらへんを「カテゴリー階層」化してうまくまとめることが出来るのである。継承モデルのようなもんである。
で、Log4J は「Java のため」の実装である。Java は言うまでもなく、OOPだ。というわけで、別に強制するわけではないが、この「カテゴリー」には、「そのクラスの完全修飾名を使え!」という重要なアドバイスがあるのである。要するに「ロギングのカテゴリー=クラス階層」でやるのがイイよ、と薦めていてくれているのである。なるほど頷けるご意見である。一応ここではそれでやっていこう。現実の開発でも、これが不便なケースって考えにくいしね(逆に言うと、これが「不便!」という時は、クラスの切り分けが間違ってない?)。
http://www.nurs.or.jp/~sug/soft/log4j/log4j1.htm
Log4jはクラスパスに log4j.xml 又は log4j.properties が含まれる場合、それらを設定ファイルとしてロードするため、各Webアプリケーションの WEB-INF/classes 以下に それらのファイルを配置する方法が最も一般的らしい。
サーブレット・コンテナが Tomcat の場合は、CATALINA_OPTS 環境変数へ log4j.configuration システムプロパティを設定する方法もある。Tomcat の起動スクリプトでは、CATALINA_OPTS を java コマンドの起動オプションとして与えるようになっているため、この環境変数へ log4j.configuration を設定すればシステムプロパティとして反映されます。以下は Unix環境における例です。
export CATALINA_OPTS="-Dlog4j.configuration=file:///home/foo/log4j.xml"
ただ、この設定はすべてのWebアプリケーションで有効になるため、最初に示したとおり基本的には WEB-INF/classes 以下に設定ファイルを格納する方法が良いらしい。
<!-- (3)categoryの設定 --> <category name="example"> <priority value="info" /> <appender-ref ref="FILE" /> </category>
全ての階層に共通的な設定はROOTで行うことができる。ROOTのきり方
<root> <level value ="warn" /> <appender-ref ref="FILE" /> </root>
ROOTとして アペンダーはFILEを使う…という意味である。
log4j.xml 全体は以下のとおりとなる
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- (1)appenderの設定 --> <appender name="FILE" class="org.apache.log4j.FileAppender"> <param name="File" value="log.txt" /> <!-- (2)layoutの設定 --> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/MM/dd} %p:%r:%c:%m%n" /> </layout> </appender> <appender name="CON" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/MM/dd} %p:%r:%c:%F-%L:%m%n" /> </layout> </appender> <!-- (3)categoryの設定 --> <category name="example.ExLog1"> <appender-ref ref="FILE" /> </category> <root> <level value ="all" /> <appender-ref ref="CON" /> </root> </log4j:configuration>
置換え文字 |
|
http://www.okisoft.co.jp/esc/log4j/universal/A6.html