log4j の appender がないと言われる警告を出さなくする

備忘録。
log4jを使用していて、以下のような警告が出ることがある。

log4j:WARN No appenders could be found for logger (xxx.xxx.xxx.Xxx).
log4j:WARN Please initialize the log4j system properly.

これはログ出力処理を行うクラスに対して、log4jの設定上、該当するAppenderの設定がされていない場合に出る。
よくあるのは、ライブラリを使用していてライブラリ内の処理でログ出力をしているのに、log4jの設定に該当するAppenderの設定がないパターン。
多数のライブラリを使用していると、いちいちパッケージを指定するのも面倒なので、ルートロガーを指定してやればよい。

log4j.properties の例

# logger
log4j.rootLogger=DEBUG, console
log4j.logger.xxx=DEBUG, console

# console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p-%c] %m%n

ただ、開発時には上記でよくても、運用時にはライブラリ内のログ出力は不要なこともあると思う。
そんな時に便利なのが、NullAppender。名前から想像できる通り、このAppenderは何も出力しない。

# logger
log4j.rootLogger=FATAL, null
log4j.logger.xxx=WARN, file

# null appender
log4j.appender.null=org.apache.log4j.varia.NullAppender

# file appender
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/var/log/webapp/xxx_log
log4j.appender.file.DatePattern='.'yyyyMMdd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%-5p-%c] %m%n
log4j.appender.file.encoding=UTF-8