Spring Bootでログを出力する

2014.10.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

タイトル通り、Spring Bootでのログの出力方法についてです。前回作成したAPIアプリに組み込みました。分かってしまえば簡単なのですが、Javaのプロダクトの知識が乏しい自分にとっては意外と時間が掛かったので、メモとして残しておきます。

ロガーについて

今回はLogbackを使用します。log4jを使用することも可能ですが、その場合は以下のサイトを参照してください。
Spring Boot公式ページ 61. Logging

ログの出力方法

1.pom.xmlの確認

Webアプリの場合は「spring-boot-starter-web」をMavenでインストールすると、Logbackを使用できるようになります。pom.xmlに以下のコードがあるかを確認してみてください。

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

2.application.yml、 application.properties

アプリケーションの定義ファイルに、ログの出力先、出力レベル等を定義します。前回作成したアプリでは.ymlを使用したので、以下のようなコードを記述します。

logging:
    file: logs/myapp.log
    level:
        org.springframework.web: INFO

なお、.propertiesの場合は(実行してはいないが)以下のような書式となるようです。

logging.file=logs/myapp.log
logging.level.org.springframework.web=INFO

上記を記述することで、アプリの実行ログがログファイルに出力されます。「実行ログ」というのは、Eclipse上で実行するとコンソールに表示されるログです。

ログに関する定義や、その他定義については、以下のサイトを参考にしてください。
Appendix A. Common application properties

3.任意のログ出力

ソース上から任意の文字列をログに出力する方法についてです。前回作成したアプリのControllerに組み込んでみました。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
(以下略)    
public class WhiskyController {
    private static final Logger logger = LoggerFactory.getLogger(WhiskyController.class);
    
    (中略)
        
    @RequestMapping(method = RequestMethod.GET)
    List<Whisky> getWhiskies() {
        logger.info("Called getWhiskies.");
        logger.error("Error getWhiskies.");
        return whiskyService.findAll();
    }
    
    (以下略)

「slf4j」をimportし(1,2行目)、Loggerのインスタンスを作成し(5行目)、.info()・.error()と出力したいレベルに合わせたメソッドを呼び出しています(11,12行目)。

まとめ

多少(?)悩んだりもしましたが、いろいろ用意されているフレームワークは楽ですね。

参考サイト

61. Logging
Appendix A. Common application properties