Logbackの出力例とサンプルコード!!

この記事は約11分で読めます。
Logbackアイキャッチ

Logbackは、Spring Bootフレームワークの
デフォルトのロギングフレームワークです。



うまく使うことで、ログ出力をレベルごとに詳細にしてくれるので
身につけておくべきスキルです。



ここでは、出力例とサンプルコードのみを紹介します。



詳細説明については、Log4j2に似ているところが多いため、
気になる方は、

こちらをご覧ください。

ログのレベル一覧

Level使用用途使用例
ERRORエラー発生時エラー発生全般で使用
WARNメインプログラムではないエラーバックアップしていたファイルの削除失敗時など
INFO正常動作のログ(進捗状況など)メソッドの実行始めと終わりなど
DEBUG開発時に使用する発行するSQL文の確認、変数の確認など
TRACE最も詳細なログあまり使わないかな。。1

環境と必要ファイル

  • Maven
  • Java 17
  • /
    • src
      • main
        • java
          • メインプログラムのJavaファイル
        • resources
          • logback.xml(propertiesやymlでも可)
    • pom.xml

サンプルコードと出力例

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.1</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>LogbackSample</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>LogbackSample</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

※Eclipseにてプロジェクトを立ち上げ、何も変更していないpomファイルです。
 LogbackはSpring Bootでデフォルトで備わっているので、特に追加することはありません。

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LogbackSampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(LogbackSampleApplication.class, args);
		
		Logger logger = LoggerFactory.getLogger(LogbackSampleApplication.class);
		
		logger.trace("トレーーーーーーーーース!!!!!");
		logger.debug("デバーーーーーーーーーック!!!!!");
		logger.info("インフォーーーーーーーー!!!!!");
		logger.warn("ワーーーーーーーーーーーーン!!!");
		logger.error("エラーーーーーーーーー!!!!!");
	}
}

コンソール出力の例

logback.xmlなしの場合

出力例

logbackはデフォルト設定で、レベルがINFOなので、
INFOレベル以上のログしか出力されていません。

logback.xmlありの場合

xmlファイル

<configuration>
	<!-- ルートロガーの設定 -->
	<root level="TRACE">
		<appender-ref ref="CONSOLE" />
	</root>
	<!-- コンソールへのログ出力設定 -->
	<appender name="CONSOLE"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d [%thread] %highlight(%p) %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>
</configuration>

出力例

ファイル出力例

xmlファイル

<configuration>
	<!-- ログディレクトリの指定 -->
	<property name="logDirectory" value="logs" />
	<!-- 1日ごとに新しいログファイルを生成 -->
	<appender name="dailyRollingFile"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- ログファイルのパターン -->
			<fileNamePattern>${logDirectory}/logback%d{yyyyMMdd}.log</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>

		<encoder>
			<pattern>%d{HH:mm:ss} [%thread] %p %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>

	<root level="TRACE">
		<appender-ref ref="dailyRollingFile" />
	</root>
</configuration>

出力例と出力先

18:20:38 [restartedMain] TRACE c.e.demo.LogbackSampleApplication - トレーーーーーーーーース!!!!!
18:20:38 [restartedMain] DEBUG c.e.demo.LogbackSampleApplication - デバーーーーーーーーーック!!!!!
18:20:38 [restartedMain] INFO c.e.demo.LogbackSampleApplication - インフォーーーーーーーー!!!!!
18:20:38 [restartedMain] WARN c.e.demo.LogbackSampleApplication - ワーーーーーーーーーーーーン!!!
18:20:38 [restartedMain] ERROR c.e.demo.LogbackSampleApplication - エラーーーーーーーーー!!!!!
  • /
    • src
      • main
        • java
        • resources
          • logback.xml(propertiesやymlでも可)
    • pom.xml
    • logs
      • logback20240116.log

詳細説明が欲しい方は、Log4j2の記事でしています。
似ているところが多く、Log4j2と合わせて理解できるので
ぜひご覧ください。

  1. TRACEレベルにログを出力すると、たくさんのログが出力されてしまい見にくくなる。 ↩︎