Log4Jの落とし穴

ということで、Log4Jを使おうと思ってlog4j.jarをクラスパスに含めたら、今までおとなしかったライブラリがモノを言い始めた。
まずはBeanUtils。でも、これはloggerがねぇよ!って言ってるだけだったので、log4j.properties的なファイルにこんなのを追加すればよろしい。

log4j.appender.null = org.apache.log4j.varia.NullAppender
log4j.logger.org.apache.commons.beanutils.BeanUtils=INFO, null


問題はVelocityで、これはログファイルを作ってくれやがるので、邪魔。いちライブラリの分際で勝手にファイル作るなと。しかも、デフォルトでログレベルFINEってどうよ。
で、なんかググってみつける情報は古くてVelocityEngineとか使ってあるし、typoでハマったりするし、さんざん。
とりあえず、Velocityのログ出力を殺すならこれ。

Velocity.addProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
        NullLogChute.class.getName());


自前のlog4j.properties的ファイルで設定できるようにするならこれ。

Velocity.addProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
        Log4JLogChute.class.getName());
Velocity.addProperty(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER, "velocity");


そうするとlog4j.properties的なファイルにこんな感じで書けばいいようになる。

log4j.appender.null = org.apache.log4j.varia.NullAppender
log4j.logger.velocity=INFO, null