Spring Boot - Logback-access が使いやすくなる自動設定を作って公開した

Logback-access を Spring Boot の組込み Tomcat or Jetty で
使いやすくする自動設定ライブラリを作りました。
Maven Central Repository に公開もしてみました。

Logback-access とは

サーブレットコンテナの HTTP アクセスログを採るライブラリです。

簡単なアクセスログなら server.tomcat.accesslog.* あたりをいじれば
採れそうでしたが、自分の興味から Logback-access を使ってみました。

自前の Encoder や Layout を使いたい場合にいいかも。かも。

経緯

LogbackValve を Spring Boot の組込み Tomcat に仕込んでみました。

が、 LogbackValve はデフォルトで
$TOMCAT_HOME/conf/logback-access.xml を参照するようです。
組込み Tomcat だとテンポラリフォルダを参照しにいきました…

LogbackValve#setFilename(String) でファイルパスの変更も試しましたが、
残念なことに内部で new File(String) してて、
JAR ファイル内のリソースは使えませんでした…

  • Spring Boot アプリなら JAR ファイル1つで動くようにしたい!
  • 前々から Spring Boot の自動設定の仕組み
    (@Conditional 系アノテーション等) を使ってみたかった!

とゆーことで、今回 Logback-access の Auto-Configuration を作ってみました。

作ったもの

akihyro/spring-boot-ext-logback-access - GitHub

クラスパスに加えれば、クラスパス直下の設定ファイル logback-access.xml を使って、
Tomcat の場合は LogbackValve, Jetty の場合は RequestLogImpl を自動で仕込みます。

使い方

spring-boot-starter-web プロジェクトを用意

Tomcat ならこちら。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Jetty ならこちら。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

依存関係に spring-boot-ext-logback-access を追加

<dependency>
    <groupId>net.rakugakibox.springbootext</groupId>
    <artifactId>spring-boot-ext-logback-access</artifactId>
    <version>1.0</version>
</dependency>

クラスパス直下に設定ファイル logback-access.xml を配置

common パターンでコンソールに吐きだすだけならこんな感じ。
詳しい設定方法は Logback-access 公式ページ に載ってます。

<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>common</pattern>
    </encoder>
  </appender>
  <appender-ref ref="CONSOLE" />
</configuration>

application.yml 等でプロパティを調整すれば、ファイルパスは変更できます :)

logback.access.config: "classpath:your-logback-access.xml"

以上!