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"とか使えたほうが良かった気もする。