はじめに
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)
以上、ログになります。
これからも継続していきましょう!!


コメント