rakugakibox.net

技術ノート。兼JS/CSS実験場。 ♡:Java, Spring, AWS.

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 を作ってみました。

作ったもの

クラスパスに加えれば、
クラスパス直下の設定ファイル 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"

以上!

関連記事