Java LogbackとSLF4jでテキストにログを出力

LogbackとSLF4jでテキストファイルにログを出力するサンプルです。
xmlの設定ファイルを使用します。(確認環境:Java8,Windows10)

目次

サンプル logbackとSLF4jとは
  logbackとSLF4jの取得
  設定ファイルの作成(logback.xml)
  slf4jでログを出力する
  出力ファイルの確認

logbackとSLF4jとは

SLF4jとは

  • SLF4jは、ログファサード(Facade)ライブラリです。
  • SLF4Jは、ログ出力の抽象層です。あるログから別のログに移行できる設計です。
    (例、java.util.logging、logback、log4j)
  • 以下は、SLF4jのJavadocとSLF4jのページのリンクです。
    https://www.slf4j.org/apidocs/index.html
    https://www.slf4j.org/

 

logbackとSLF4jの取得

1.Mavenで取得する場合

pom.xmlの<dependencies>の間に以下のコードを追加します。
※バージョンは新しいものが出ているか確認して下さい。

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.7</version>
    <scope>test</scope>
</dependency>

※確認環境では、jarは取得しましたがorg.slf4j.Logger等が参照できずエラーになりました。
エラーが解消しない場合はjarファイルで取得します。

 

2.jarファイルで取得する場合

以下3つのjarファイルを取得しクラスパスに追加します。
※バージョンは新しいものが出ているか確認して下さい。

logback-classic-1.2.3.jar
logback-core-1.2.3.jar
slf4j-api-1.7.25.jar  

Logbackのサイト
https://logback.qos.ch/download.html

mvnrepositoryのサイト
https://mvnrepository.com/artifact/ch.qos.logback

クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法

 

設定ファイルの作成(logback.xml)

logback.xmlというファイルを作成しコードを記述します。logback.xmlはなくても動きます。

<configuration>
 
  <property name="logDir" value="./log/" />
  <property name="fileName" value="testlog.log" />
  <property name="format1" value="%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-6p %c{10} %m%n" />
 
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${logDir}${fileName}</file>
    
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${logDir}${fileName}.%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>1</maxHistory>
    </rollingPolicy>
    
    <encoder>
      <pattern>${format1}</pattern>
    </encoder>
  </appender>
 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${format1}</pattern>
    </encoder>
  </appender>
 
  <root level="trace">
    <appender-ref ref="FILE" />
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

3行目のpropertyタグは、変数の設定です。nameの値を変数として使用しています。(例:3行目のlogDirは8,11行目で使用されている)
7行目のappenderタグは、ファイル出力の設定です。
20行目のappenderタグは、コンソール出力の設定です。
26行目のrootタグのlevelには、TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFFのいずれかを指定します。小文字でも可です。WARNを設定するとログはWARNとERRORのみ出力されます。
27行目のappender-refは、参照しているアペンダーがロガーに割り当てられます。

xmlファイルの配置先

フォルダを作成してフォルダにビルドパスを追加しその中にlogback.xmlを置きます。
Eclipse フォルダを作成してビルドパスに設定する手順

 

slf4jでログを出力する

slf4jでログを出力する場合です。lombokで記述量を減らせます。

package test1;

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

public class Test1 {
	public static void main(String[] args) {

		Logger logger = LoggerFactory.getLogger("Sample");
//		Logger logger = LoggerFactory.getLogger(Test1.class);

		int a = 1;
		int b = 2;

		logger.trace("trace"); // 2017/01/24 18:19:02.512 [main] TRACE Sample trace
		logger.debug("debug"); // 2017/01/24 18:19:02.514 [main] DEBUG Sample debug
		logger.info("情報={}", a); // 2017/01/24 18:19:02.515 [main] INFO Sample 情報=1
		logger.warn("警告={}{}", a, b); // 2017/01/24 18:19:02.516 [main] WARN Sample 警告=12
		
		try {
			throw new NullPointerException();	
		}catch(Exception e) {
			logger.error("エラー", e); // 2017/01/24 18:19:02.516 [main] ERROR Sample エラー
		}                           // java.lang.NullPointerException: null
	}
}

9行目の引数は、文字列またはクラスを指定できます。ログに出力されるので検索で使用できます。
一般的にはクラスを指定します。
17,18行目は、文字列の中に値を代入しています。
23行目は、例外のインスタンスを引数にしています。

 

出力ファイルの確認

実行するとコンソールとxmlの3行目のフォルダにログファイルが出力されます。
(プロジェクトフォルダのlogフォルダ配下にtestlog.logが出力)
ログファイルが存在しない場合は新規に作成されます。
ログファイルが存在する場合は追記されます。

出力されるログは以下の通りです。

2017/01/24 18:19:02.512 [main] TRACE Sample trace
2017/01/24 18:19:02.514 [main] DEBUG Sample debug
2017/01/24 18:19:02.515 [main] INFO Sample info: 1
2017/01/24 18:19:02.516 [main] WARN Sample warn: 12
2017/01/24 18:19:02.516 [main] ERROR Sample error: null

関連の記事

Java log4j2でテキストにログを出力するサンプル
Java log4j 1.2でテキストにログを出力(テキストで設定)
Java log4j 1.2でテキストにログを出力(xmlで設定)
Java log4j 1.2でコンソールにログを出力するサンプル

△上に戻る