Spring Bootでログを出力する
はじめに
タイトル通り、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行目)。
まとめ
多少(?)悩んだりもしましたが、いろいろ用意されているフレームワークは楽ですね。