logbackを使用することになったのでlogbackとslf4jの設定方法をメモ代わりに記述してみました。
log4jは開発終了らしく今後はlogbackを推奨らしい。
SLF4Jとlogbackを利用しロギングする仕組みが今後のスタンダードになるのだろうか?
SLF4JからSLF4Jをダウンロードし、
Logback Homeからlogbackをダウンロードする。
今回利用したのはlogbakが0.9.14でSLF4Jが1.5.6を利用しました。
アーカイブを展開するとjarがめちゃめちゃ一杯でます。
正直どれを使っていいのか悩みました。
logback:
logback-access-0.9.14.jar
logback-classic-0.9.14.jar
logback-core-0.9.14.jar
slf4j:
integration-1.5.6.jar
jcl-over-slf4j-1.5.6.jar
jul-to-slf4j-1.5.6.jar
log4j-over-slf4j-1.5.6.jar
slf4j-api-1.5.6.jar
slf4j-ext-1.5.6.jar
slf4j-jcl-1.5.6.jar
slf4j-jdk14-1.5.6.jar
slf4j-log4j12-1.5.6.jar
slf4j-migrator-1.5.6.jar
slf4j-nop-1.5.6.jar
slf4j-simple-1.5.6.jar
今回は利用したjarはlogback-classic-0.9.14.jar,logback-core-0.9.14.jar,slf4j-api-1.5.6.jarの三つを利用しました。
以下がサンプルプログラムになります。
[TestLogging.java]
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; import org.slf4j.MarkerFactory; import junit.framework.TestCase; public class TestLogging extends TestCase { protected static Logger log = LoggerFactory.getLogger(TestLogging.class); protected static Marker marker = MarkerFactory.getMarker(TestLogging.class.getName()); public TestLogging() { } public void testPutLog() { // 各ログの出力 log.trace("trace"); log.debug("debugdebug"); log.info("info"); log.warn("warnnnnnnnn!"); log.error("ERRORRRRRRRRRRRRRRRR!"); // makerを利用した出力 Object[] yarumi = new Object[]{"やる美",new Integer(30),"普通"}; Object[] yaranaio = new Object[]{"やらない夫",new Integer(60),"セレブ"}; Object[] yaruo = new Object[]{"やる夫",new Integer(10),"ワープア"}; log.info( marker, "{}の今月の給料は{}万円で{}です", yarumi); log.info( marker, "{}の今月の給料は{}万円で{}です", yaranaio); log.info( marker, "{}の今月の給料は{}万円で{}です", yaruo); } }
設定ファイルはxml一本になったらしくpropertiesファイルは見捨てられたみたいです。
ファイル名はlogback.xmlとしクラスパス上に設置します。
[logback.xml]
<!-- logback の設定ファイル アペンダはこちらのドキュメントを参考に http://logback.qos.ch/manual/appenders.html レイアウトはこちらを参考にどうぞ http://logback.qos.ch/manual/layouts.html --> <configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!-- ファイル名 --> <file>debug.log</file> <!-- パターンレイアウト --> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %date{MM/dd hh:mm:ss:SSS} %logger{0} %-5.5level %-20.20method %-4.4line %msg%n </Pattern> </layout> </appender> <!-- logを標準出力に出力 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- ターゲットを標準出力へ --> <Target>System.out</Target> <!-- パターンレイアウト --> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %date{MM/dd hh:mm:ss:SSS} %logger{0} %-5.5level %-20.20method %-4.4line %msg%n </Pattern> </layout> </appender> <!-- ログ出力に関する設定 --> <root> <!-- 出力するレベルを設定 --> <level value="debug" /> <!-- アペンダを設定 --> <appender-ref ref="FILE" /> <appender-ref ref="STDOUT" /> </root> </configuration>
以下が出力結果になります。
01/06 02:13:33:742 TestLogging DEBUG testPutLog 26 debugdebug
01/06 02:13:33:758 TestLogging INFO testPutLog 27 info
01/06 02:13:33:758 TestLogging WARN testPutLog 28 warnnnnnnnn!
01/06 02:13:33:758 TestLogging ERROR testPutLog 29 ERRORRRRRRRRRRRRRRRR!
01/06 02:13:33:758 TestLogging INFO testPutLog 37 やる夫の今月の給料は10万円でワープアです
01/06 02:13:33:758 TestLogging INFO testPutLog 38 やらない夫の今月の給料は60万円でセレブです
01/06 02:13:33:758 TestLogging INFO testPutLog 39 やる美の今月の給料は30万円で普通です
上手にできました。
jdk1.4に対応する場合などはちょっとちがうのかもしれませんがとりあえずログ出力できました。