SLF4Jとか
ながいことcommon-loggingとlog4jでやってきてたけど、昨年くらいからSLF4JとLog4Jでやってます。
common-loggingは1.1がどうしても信用できん。Servletで動かしてるとdestroyのときにエラー吐くんで、1.0.4でずっとやってきてました。
なんといってもcommon-logging-1.1になって、依存先になぜかavalon-frameworkがある。まったくもって意味不明。avalonってずいぶん昔に開発終わったじゃん?それをなぜあえて取り入れる?方針がおかしいとしか思えん。
おそらく今の時代は SLF4J + LogBack ってのが一番なんだろうけど、LogBackがまだまだマイナーなんでLog4Jを使ってます。
昔開発したLog4JのAppenderとかもまだ使えるし。
Mavenではこんなかんじ。
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> <type>jar</type> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.0.1</version> <type>jar</type> </dependency>
使うときはんなかんじ。"{}"が置き換えパラメータらしい。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Hoge { Logger logger = LoggerFactory.getLogger(this.getClass()); ・・・・ void hoge(){ logger.debug("Hello {}.", "Chinpei"); }
SLF4JはパラメータがObjectじゃなくてStringになってる。どうせならCharSequenceにしてくれてたら良かったのに。StringBuilderとかそのまま突っ込みたいじゃん。
まぁObject渡してtoString呼んでくれてる仕様でもいいんだけど、いちいちこちらからtoString呼んで渡すのは、nullの時とか怖いしねぇ。
あと、どうせなら置き換えパラメータに"%d"とか使えたほうが良かった気もする。