Apache Solrのログをlogback経由で出力する

SolrのログはTomcatにデプロイするとcatalina.outに出てくるんだけど、それがJDK logging経由なのでえらくフォーマットやローテーションが難しい。Solrは1.4からslf4jをloggingのinterfaceに利用しているので、logbackに実装を変更することも簡単のはずなのでやってみた

  • Solrをダウンロードして展開する
$ tar xvzf apache-solr-1.4.0.tgz
  • logback,slf4jもダウンロードして展開する
$ wget http://logback.qos.ch/dist/logback-0.9.20.tar.gz
$ tar xvzf logback-0.9.20.tar.gz

$ rm -rf slf4j-1.5.11
$ wget http://www.slf4j.org/dist/slf4j-1.5.11.tar.gz
$ tar xvzf slf4j-1.5.11.tar.gz
  • 必要なライブラリをSolrにコピー
$ rm apache-solr-1.4.0/lib/slf4j-api-1.5.5.jar
$ rm apache-solr-1.4.0/lib/slf4j-jdk14-1.5.5.jar
$ cp -p slf4j-1.5.11/slf4j-api-1.5.11.jar apache-solr-1.4.0/lib/
$ cp -p slf4j-1.5.11/slf4j-jdk14-1.5.11.jar apache-solr-1.4.0/lib/
$ cp -p logback-0.9.20/logback-classic-0.9.20.jar apache-solr-1.4.0/lib/
$ cp -p logback-0.9.20/logback-core-0.9.20.jar apache-solr-1.4.0/lib/
$ mkdir apache-solr-1.4.0/src/webapp/web/WEB-INF/classes
$ cat > apache-solr-1.4.0/src/webapp/web/WEB-INF/classes/logback.xml <<_EOF_
 <configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>/var/logs/solr.log</file>
    <append>true</append>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
 
  <root level="debug">
    <appender-ref ref="FILE" />
  </root>
 </configuration>
_EOF_
  • solrをビルド
$ cd apache-solr-1.4.0
$ ant dist     #jarのダウンロードにproxyが必要な場合は "-Dproxy.host=... -Dproxy.port=..."を設定する
  • できたwarをTomcatにデプロイ

これでsolrを動かしてみると、/var/logs/solr.logにログが出るはず。