ロギングの基本(slf4j + Logback 等) — 運用ログ
アプリケーションの「動作記録」を残すのがロギング。
print文でのデバッグから卒業し、slf4j + Logback を使うと、運用に耐えるログが簡単に書けます。初心者向けに、基本のコード例とテンプレートを整理します。
ロギングの役割
- 開発中: デバッグ情報を確認。
- 運用中: 障害調査、監査、性能分析。
- 特徴: 出力レベルを切り替え、ファイルやコンソールに柔軟に出力できる。
slf4j(ログのAPI)と Logback(実装)
- slf4j: ロギングの「共通インターフェース」。コードは slf4j に依存。
- Logback: 実際にログを出力する「実装」。設定ファイルで出力先やフォーマットを制御。
- メリット: 実装を差し替えてもコードはそのまま。log4j2 などにも切り替え可能。
基本コード例
1. ロガーの取得
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class App {
private static final Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
log.info("アプリ開始");
log.debug("詳細情報: args={}", args.length);
try {
int x = 10 / 0;
} catch (Exception e) {
log.error("エラー発生", e);
}
}
}
Java- ポイント:
LoggerFactory.getLogger(クラス)でロガーを取得。log.info,log.debug,log.errorなどレベルごとに出力。{}プレースホルダで変数を埋め込める。
2. ログレベルの意味
| レベル | 用途 |
|---|---|
| TRACE | 最も詳細。ステップごとの追跡。 |
| DEBUG | 開発時の詳細情報。 |
| INFO | 通常の動作記録。 |
| WARN | 注意すべき事象。 |
| ERROR | 重大なエラー。 |
👉 運用では INFO 以上を出力、開発時は DEBUG まで出すのが一般的。
3. Logback の設定例(logback.xml)
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Java- pattern: 出力フォーマット。日時・レベル・クラス名・メッセージ。
- root level: 全体のログレベル。ここを DEBUG にすると詳細まで出る。
例題で練習
例題1: ユーザー登録処理のログ
public void registerUser(String name) {
log.info("ユーザー登録開始: {}", name);
try {
// 登録処理
log.debug("DBに保存中: {}", name);
log.info("ユーザー登録成功: {}", name);
} catch (Exception e) {
log.error("ユーザー登録失敗: {}", name, e);
}
}
Java👉 正常系は INFO、詳細は DEBUG、例外は ERROR。
例題2: バッチ処理の進捗ログ
for (int i = 0; i < tasks.size(); i++) {
log.info("タスク {}/{} 実行中", i+1, tasks.size());
try {
tasks.get(i).run();
} catch (Exception e) {
log.warn("タスク失敗: index={}", i, e);
}
}
Java👉 進捗は INFO、失敗は WARN。
例題3: 外部API呼び出しのログ
log.info("API呼び出し開始: url={}", url);
var response = client.get(url);
log.debug("レスポンス詳細: {}", response);
if (response.isError()) {
log.error("APIエラー: {}", response.getStatus());
}
Java👉 呼び出し開始は INFO、詳細は DEBUG、エラーは ERROR。
テンプレート集
ロガー定義
private static final Logger log = LoggerFactory.getLogger(クラス名.class);
Javaログ出力
log.info("処理開始: {}", param);
log.debug("詳細: {}", detail);
log.warn("注意: {}", warning);
log.error("エラー: {}", error, exception);
Java設定ファイル(logback.xml)
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
Javaまとめ
- slf4j: ロギングの共通API。
- Logback: 実装。設定ファイルで制御。
- ログレベル: TRACE/DEBUG/INFO/WARN/ERROR を使い分ける。
- 実務: INFOで通常記録、DEBUGで詳細、ERRORで障害。
👉 練習課題として「注文処理クラス」を作り、開始・成功・失敗をログに出すと、ログレベルの使い分けが体感できます。
