【Java】Mavenプロジェクトでログ出力機能としてSLF4J・Logbackを使用する方法

Java

はじめに

Java 開発では、ログは障害調査や運用保守の重要機能です。Javaで提供されているログフレームワークは種類が多く、どれを選択するか悩みがちでプロジェクトによっても混在しがちです。
そこておすすめがするのが「SLF4J(ログの統一API)+ Logback(ログ実装)」になります。
今回は、SLF4JとLogbackを使用したログ出力方法をログとして記載していきます。

他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:

👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編

 

SLF4Jとは

SLF4J(Simple Logging Facade for Java)は、ログライブラリの統一インターフェースを提供する仕様です。SLF4Jはログライブラリそのものではなく、ログのフロントエンド(窓口) となっており、SLF4J の APIを使用しておけば、裏側のログライブラリは 依存関係の変更だけで差し替え可能になります。

     ┌─────────┐
     │  SLF4J  │  ←(アプリはこれだけ意識)
     └─────┬───┘
                 │
   ┌──────┬───────┐
   │Logback     │Log4j2        │JUL(Java Util Logging)

 

Logbackとは

Logbackは SLF4Jの公式推奨ログ実装ライブラリ であり、Log4jをより高機能・高性能にした後継的立ち位置のログフレームワークです。

 

Logbackの特徴

特徴内容
高速処理性能大量ログでも安定して出力可能となっている
柔軟な設定(logback.xml)環境別・出力先切替が簡単にできる
Spring BootのデフォルトSpring Bootにデフォルトで搭載されており、学習コストが低く、安心して使用できる

 

使い方

Mavenで導入方法

pom.xml に以下追加sることで簡単に導入することができます。

<dependencies>
    <!-- SLF4J API -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.12</version>
    </dependency>

    <!-- Logback 実装 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.4.14</version>
    </dependency>
</dependencies>

 

設定ファイルを作成

リソースフォルダ配下に設定ファイルを作成します。
src/main/resources/logback.xml

<configuration>
    <!--ログ出力先 -->
    <property name="logDir" value="./logs/" />
    <property name="fileName" value="testlog.log" />

    <!--コンソールのログ出力設定 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

        <!--ログ出力フォーマット設定 -->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%date [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- ファイル出力 + 日次ローテーション -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logDir}/app.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日次ローテーション -->
            <fileNamePattern>${logDir}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保持期間 30日 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

 

Logger の実装

Loggerをインポートし、呼び出すことで各エラーレベル毎にログを出力することができます。

package com.example;

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

/**
 * Hello world!
 *
 */
public class App 
{

    private static final Logger log = LoggerFactory.getLogger(App.class);

    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );

        log.trace("trace!");
        log.debug("debug!");
        log.info("info!");
        log.warn("warn!");
        log.error("error!");
    }
}

 

ログレベル

レベル目的
TRACEシステムの詳細追跡
DEBUGデバッグ情報
INFO通常運用ログ
WARN警告(処理継続可)
ERROR重大障害

 

まとめ

Mavenプロジェクトでログ出力を行う際、SLF4J + Logback組み合わせ組み合わせを選択するのがおすすめとなります。本記事のような形で、以下のようなメリットが存在するからです。

  • 統一されたログの書き方ができる
  • 大量ログでも安定して出力可能な実務に耐える出力性能
  • バックエンド実装の自由度で移行も容易となる

今後はSLF4J + Logbackでログ出力を考えてみましょう。

 

ドキュメント

【公式ドキュメント】
Java SE Specifications (oracle.com)

【SLF4J】
SLF4J

 

最後に

Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました