山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

Eclipse で Maven プロジェクトの作成から slf4J + logback の設定

どのようなプログラムでもログ出力は必ず必要になります。したがって、Eclipse でプロジェクトを作成したら、まずログ出力できるような設定を行ってしまいましょう。

今回は現時点でロギングフレームワークデファクトスタンダードである slf4j + logback でログ出力が行えるような設定を行います。

参考にさせていただきました。
SLF4J+Lobackの基本 | Java好き

Maven プロジェクトの作成

パッケージエクスプローラで右クリックして [New] → [Other] を選択すると、[New]ダイアログが表示されます。( Eclipse を日本語化している人は脳内翻訳して読んでください。)
f:id:yyama1556:20170428140336p:plain

Maven フォルダ内にある、[Maven Project]を選択して[Next]ボタン押下します。

すると[New Maven Project]ダイアログが表示されます。今回は学習のため、一番シンプルに作りたいので、[Create a simple project]にチェックを入れます。
f:id:yyama1556:20170428140737p:plain

[Next]ボタンをクリックするとアーティファクトの情報を入力する画面になるので、グループ ID とかアーティファクト ID とか、適当なものを入力してください。私の場合、以下のようにしました。
f:id:yyama1556:20170428141057p:plain

[Finish]ボタンを押下するとpom ファイル1個だけのシンプルなプロジェクトが作成されます。
f:id:yyama1556:20170428141647p:plain

Java バージョンの修正

Eclipse で Maven プロジェクトの作成からJDKバージョンの設定 - 山崎屋の技術メモ

以前、記事にもしましたが、Maven で作成したプロジェクトの Java バージョンは 1.5 になっているので、 1.8 に変更します。

修正前の pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.yyama</groupId>
	<artifactId>sample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</project>

修正後の pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.yyama</groupId>
	<artifactId>sample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>
</project>

pom ファイルを保存し、パッケージエクスプローラ内でプロジェクトを右クリック、[Maven]→[Update Project...]を選択。
f:id:yyama1556:20170428142436p:plain

[Update Maven Project]ダイアログが表示されるので、作成中のプロジェクトにチェックが入っていることを確認して、[OK]ボタンを押下してください。

次のように、JRE System Library の箇所に [JaveSE-1.8]と表示されていれば OK です。
f:id:yyama1556:20170428142837p:plain

slf4J + logback の設定

pom.xml を再度編集し、グループ ID [ch.qos.logback]、アーティファクト ID [logback-classic] を依存先( dependency )に追加します。

バージョンは現時点(2017年4月28日)で最新の 1.2.3 にします。

修正後の pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.yyama</groupId>
	<artifactId>sample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>
	<!-- ↓↓↓↓↓ ここを追加 ↓↓↓↓↓ -->
	<dependencies>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
	</dependencies>
	<!-- ↑↑↑↑↑ ここを追加 ↑↑↑↑↑ -->
</project>

Maven Dependencies に logback-classic-1.2.3.jar、logback-core-1.2.3.jar、slf4j-api-1.7.25.jar が追加されていることが分かります。
f:id:yyama1556:20170428144217p:plain

これで準備は整いました。

ログ出力してみる

さっそくログ出力してみましょう。

Main クラスを作って、次のように記述します。

package org.yyama;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
	public static final Logger log = LoggerFactory.getLogger(Main.class);

	public static void main(String... args) {
		log.trace("trace!");
		log.debug("debug!");
		log.info("info!");
		log.warn("warn!");
		log.error("error!");
	}
}

実行結果。

14:46:26.223 [main] DEBUG org.yyama.Main - debug!
14:46:26.228 [main] INFO org.yyama.Main - info!
14:46:26.228 [main] WARN org.yyama.Main - warn!
14:46:26.228 [main] ERROR org.yyama.Main - error!

まだ logback.xml 等の設定ファイルがないので、デフォルトのログレベルと出力先(アペンダーという)が設定されています。

ログレベルは debug (だから実行結果に trace レベルのログが出力されていない)で、出力先はコンソール(標準出力)です。

lombock で楽をする

ロギングフレームワークを使用して開発を進めていくと、「public static final Logger log =...」の記述がすべてのクラスで登場することになります。lombock を使用すると、この決まり文句をアノテーションで指定できます。記述ミスもなくなるのでぜひ使いたいです。

以下の記述は Eclipse に lombock がインストールされていることを前提としています。やり方はここで紹介されています。

まず pom.xml を変更します。

変更後の pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.yyama</groupId>
	<artifactId>sample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
	</properties>
	<dependencies>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- ↓↓↓↓↓ ここを追加 ↓↓↓↓↓ -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.16</version>
			<scope>provided</scope>
		</dependency>
		<!-- ↑↑↑↑↑ ここを追加 ↑↑↑↑↑ -->
	</dependencies>
</project>

Maven Dependencies に lombock-1.16.16.jar が追加されました。
f:id:yyama1556:20170428150320p:plain

すると Main クラスを次のように簡潔に書けます。

package org.yyama;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Main {
	public static void main(String... args) {
		log.trace("trace!");
		log.debug("debug!");
		log.info("info!");
		log.warn("warn!");
		log.error("error!");
	}
}


このように、プロジェクト生成時にはついでにログ出力の設定も行ってしまいましょう。

以上です。

スッキリわかるJava入門 第2版 スッキリわかるシリーズ

スッキリわかるJava入門 第2版 スッキリわかるシリーズ

Maven3のはじめかた

Maven3のはじめかた