💻

Java × Logback でログを出力する基本設定

に公開

Javaでの開発において、ログ出力はデバッグや運用の強力な味方です。本記事では、ロギングライブラリ「Logback」を使って、ログをコンソールに出力する基本的な方法を紹介します。

💡 Logbackとは?

Logback は、Javaで広く使われているロギングフレームワークであり、SLF4J(Simple Logging Facade for Java)と連携して利用されます。構成ファイルは logback.xml で記述し、きめ細やかなログ設定が可能です。

📁 プロジェクト構成

my-java-app/
├── src/
│   └── main/
│       └── resources/
│           └── logback.xml  ← ログ設定ファイル
├── pom.xml(または build.gradle)
└── ...

⚙️ logback.xml の内容

以下は src/main/resources/logback.xml の設定例です。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
  <timestamp key="timestamp" datePattern="yyyyMMdd'-'HHmmss"/>
  
  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d [%thread] %-5level [%X{X-HT-TRANSACTION-ID}] %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- 個別のロガー設定 -->
  <logger name="org.seasar.doma" level="debug"/>
  <logger name="org.springframework" level="info"/>
  <logger name="package" level="debug"/>

  <!-- デフォルト設定(全体適用) -->
  <root level="info">
    <appender-ref ref="stdout" />
  </root>
</configuration>

🧾 この設定が意味すること

要素 説明
appender stdout ログの出力先をコンソールに指定。
%d 日時を出力。
%thread スレッド名を出力。
%level ログレベル(INFOなど)を出力。
%X{X-HT-TRANSACTION-ID} トランザクションID(MDC使用時)を表示。
%logger{36} ロガー名(パッケージ+クラス名)を最大36文字で表示。
%msg ログメッセージ本体。

🔍 ロガーごとのログレベル指定の意味

<logger name="org.seasar.doma" level="debug"/>

Doma(DBマッパー)の詳細なSQLログを出力します。

<logger name="org.springframework" level="info"/>

→ SpringフレームワークのログはINFO以上(起動情報など)を出力。

<logger name="package" level="debug"/>

package.~ で始まる自作コードのログを DEBUG レベルで出力。
  例:package.service.UserService など

<root level="info">...</root>

→ 明示されていないすべてのロガーに対して INFOレベル以上を出力。

💬 ログ出力の例(コード)

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

public class Sample {
    private static final Logger logger = LoggerFactory.getLogger(Sample.class);

    public static void main(String[] args) {
        logger.debug("デバッグログ");
        logger.info("情報ログ");
        logger.warn("警告ログ");
        logger.error("エラーログ");
    }
}

このクラスが package.Sample に属している場合:

  • DEBUG ログは出力される(logger name="package" により)
  • それ以外のログもすべて出力される(INFO 以上)

🖨️ 実行時の出力例(コンソール)

2025-05-14 10:00:00 [main] DEBUG [           ] Sample - デバッグログ
2025-05-14 10:00:00 [main] INFO  [           ] Sample - 情報ログ
2025-05-14 10:00:00 [main] WARN  [           ] Sample - 警告ログ
2025-05-14 10:00:00 [main] ERROR [           ] Sample - エラーログ
  • [%X{X-HT-TRANSACTION-ID}] は MDC に値を設定しないと空白になります。

🚀 まとめ

  • Logbackを使えば、出力先やフォーマット、ログレベルを柔軟に設定できます。
  • パッケージ名ごとにログレベルを制御すれば、必要な情報だけをログに出力できます。
  • 運用では rootINFO 本番向け、自作コードや開発時には DEBUG にしておくと便利です。

Discussion