Logbackをeclipse(Maven / Spring Boot)で使用する方法

Logbackをeclipse(Maven / Spring Boot)で使用する方法をご紹介します。

Logbackの構成

まずはLogbackの構成の話です。様々な状況に対応できるよう、Logbackは三つのモジュールに分割されています。

  1. logback-core
  2. logback-classic
  3. logback-access

それぞれのモジュールの役割は次のとおりです。

coreモジュールは、他の二つのモジュールの足回りとして使用されています。classicモジュールは、 coreを拡張するものです。classic モジュールは、著しく改善されたバージョンのlog4jとも考えられます。logback-classic は SLF4J API を直接実装しているので、log4j や java.util.logging(JUL)などの他のロギング実装と切り替えることができます。三つ目のaccessと呼ばれるモジュールは、HTTPのアクセスログ機能を提供するため、サーブレットコンテナと統合しています。access モジュールについては別のドキュメントに記載されています。
引用:第2章 アーキテクチャ – Logback

本記事ではLogbackの基本的な使用方法を取り扱うため、logback-accessモジュールについては割愛します。

Mavenでモジュール取得

続いて、MavenでLogbackのモジュールを取得する方法です。pom.xmlに次のように記載します。logback-classicのみをMavenで記載すれば、依存関係の解決で自動で使用するモジュールを取得します。

pom.xml
...
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
  <scope>test</scope>
</dependency>
...

ここではVersion 1.2.3を使用しましたが、その他の有効なバージョンはMaven Centralに記載があります。

Logback Classic Module – Maven Central Repository

上記のように記述し、Maven installを実行するとモジュールがダウンロードされます。pom.xmlをOpenしてDependency Hierarchyを見てみるとモジュールが依存関係のあるモジュールまでダウンロードされ、Pathが通っていることが分かります。

上記のとおりlogback-classicをMavenに記述しても、logback-accessはダウンロードされておらず依存関係は無いことが分かります。しかし、slf4j-apiがダウンロードされており依存関係があることが分かります。

slf4j-apiは、logback-classicの受付口の役割を持っており、ファサードデザインになっています。

Spring bootでモジュール取得

「spring-boot-starter」がlogbackに依存しているため、特に何もしなくもモジュール取得できています。

Logback の設定

Logbackの設定です。Logbackは次のようにして設定を順番に探します。

1. logback はクラスパス上でlogback.groovyというファイルを探します。

2. 見つからなかったら、今度はクラスパス上でlogback-test.xmlというファイルを探します。

3. 見つからなかったら、今度はクラスパス上でlogback.xmlというファイルを探します。

4. 何も見つからなかったら、自動的にBasicConfiguratorを使って設定します。ロギング出力は直接コンソールに出力されるようになります。

引用:第3章 logbackの設定 – Logback

コーディングの方法

ログ出力されるコーディング方法は次のとおり、主に2つ(1行目、2行目)あります。どちらの書き方でも同様の出力ですが、2行目を推奨します。

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

推奨する理由としては、ロギングを出力しない際の処理コストが少なくなるためです。1行目のように記述すると、常にパラメータ構築の処理コストが発生するためロギングを出力しない際は無駄になります。

なお、2行目の書き方で2つパラメータを指定することもできます。

logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);