ログ

Spring Boot には、通常 Spring Framework の spring-jcl モジュールによって提供される Commons Logging API を除いて、必須のログ依存関係はありません。Logback (英語) を使用するには、それと spring-jcl をクラスパスに含める必要があります。これを行うための推奨される方法は、スターターを使用することです。スターターはすべて spring-boot-starter-logging に依存します。Web アプリケーションの場合は、ロギングスターターに推移的に依存するため、spring-boot-starter-web のみが必要です。Maven を使用する場合、次の依存関係によってログが追加されます。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot には、クラスパスのコンテンツに基づいてロギングを構成しようとする LoggingSystem 抽象化があります。Logback が利用可能な場合、それが最初の選択肢です。

ロギングに加える必要がある唯一の変更がさまざまなロガーのレベルを設定することである場合、次の例に示すように、"logging.level" プレフィックスを使用して application.properties でそれを行うことができます。

  • プロパティ

  • YAML

logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
  level:
    org.springframework.web: "debug"
    org.hibernate: "error"

logging.file.name を使用して、(コンソールに加えて) ログが書き込まれるファイルの場所を設定することもできます。

ロギングシステムのよりきめ細かい設定を構成するには、対象の LoggingSystem でサポートされているネイティブ構成形式を使用する必要があります。デフォルトでは、Spring Boot はシステムのデフォルトの場所(Logback の場合は classpath:logback.xml など)からネイティブ構成を選択しますが、logging.config プロパティを使用して構成ファイルの場所を設定できます。

ロギング用に Logback を構成する

application.properties で実現できる以上のカスタマイズを logback に適用する必要がある場合は、標準の logback 構成ファイルを追加する必要があります。logback が検索できるように、クラスパスのルートに logback.xml ファイルを追加できます。Spring Boot Logback 拡張を使用する場合は、logback-spring.xml を使用することもできます。

Logback のドキュメントには、構成 (英語) を詳細にカバーする専用セクションがあります (英語)

Spring Boot は、独自の構成で included にできる多数の logback 構成を提供します。これらのインクルードは、特定の一般的な Spring Boot 規則を再適用できるように設計されています。

以下のファイルが org/springframework/boot/logging/logback/ で提供されています。

  • defaults.xml - 変換ルール、パターンプロパティ、一般的なロガー構成を提供します。

  • console-appender.xml - CONSOLE_LOG_PATTERN を使用して ConsoleAppender を追加します。

  • file-appender.xml - 適切な設定で FILE_LOG_PATTERN および ROLLING_FILE_NAME_PATTERN を使用して RollingFileAppender を追加します。

さらに、以前のバージョンの Spring Boot との互換性のために、レガシー base.xml ファイルが提供されています。

典型的なカスタム logback.xml ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
	<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
	<root level="INFO">
		<appender-ref ref="CONSOLE" />
	</root>
	<logger name="org.springframework.web" level="DEBUG"/>
</configuration>

logback 構成ファイルは、LoggingSystem が作成するシステムプロパティを利用することもできます。

  • ${PID}: 現在のプロセス ID。

  • ${LOG_FILE}logging.file.name が Boot の外部構成で設定されたかどうか。

  • ${LOG_PATH}logging.file.path (ログファイルが存在するディレクトリを表す)が Boot の外部設定で設定されたかどうか。

  • ${LOG_EXCEPTION_CONVERSION_WORD}logging.exception-conversion-word が Boot の外部構成で設定されたかどうか。

  • ${ROLLING_FILE_NAME_PATTERN}logging.pattern.rolling-file-name が Boot の外部構成で設定されたかどうか。

また、Spring Boot は、カスタム Logback コンバーターを使用して、コンソール上に(ログファイルではなく)素敵な ANSI カラーターミナル出力を提供します。例については、defaults.xml 構成の CONSOLE_LOG_PATTERN を参照してください。

Groovy がクラスパス上にある場合、logback.groovy で Logback も構成できるはずです。存在する場合、この設定が優先されます。

Spring 拡張は、Groovy 構成ではサポートされていません。logback-spring.groovy ファイルは検出されません。

ファイルのみの出力用に Logback を構成する

コンソールロギングを無効にし、出力のみをファイルに書き込む場合は、次の例に示すように、console-appender.xml ではなく file-appender.xml をインポートするカスタム logback-spring.xml が必要です。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/defaults.xml" />
	<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
	<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
	<root level="INFO">
		<appender-ref ref="FILE" />
	</root>
</configuration>

次の例に示すように、logging.file.name を application.properties または application.yaml に追加する必要もあります。

  • プロパティ

  • YAML

logging.file.name=myapplication.log
logging:
  file:
    name: "myapplication.log"

ロギング用に Log4j を構成する

Spring Boot は、クラスパス上にある場合、ロギング構成用に Log4j 2 [Apache] (英語) をサポートします。依存関係を組み立てるためにスターターを使用する場合は、Logback を除外し、代わりに Log4j 2 を含める必要があります。スターターを使用しない場合は、Log4j 2 に加えて (少なくとも) spring-jcl を提供する必要があります。

推奨されるパスは、多少のギミックが必要ですが、スターターを経由することです。以下の例は、Maven でスターターを設定する方法を示しています。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

Gradle は、スターターをセットアップするためのいくつかの異なる方法を提供します。1 つの方法は、モジュールの交換 (英語) を使用することです。これを行うには、次の例に示すように、Log4j 2 スターターへの依存関係を宣言し、デフォルトのロギングスターターが発生した場合は Log4j2 スターターに置き換える必要があることを Gradle に通知します。

dependencies {
	implementation "org.springframework.boot:spring-boot-starter-log4j2"
	modules {
		module("org.springframework.boot:spring-boot-starter-logging") {
			replacedBy("org.springframework.boot:spring-boot-starter-log4j2", "Use Log4j2 instead of Logback")
		}
	}
}
Log4j スターターは、共通のロギング要件(Tomcat で java.util.logging を使用するが Log4j 2 を使用して出力を構成するなど)の依存関係を収集します。
java.util.logging を使用して実行されるデバッグロギングが Log4j 2 にルーティングされるようにするには、java.util.logging.manager システムプロパティを org.apache.logging.log4j.jul.LogManager に設定して、JDK ロギングアダプター [Apache] (英語) を構成します。

YAML または JSON を使用して Log4j 2 を構成する

デフォルトの XML 構成形式に加えて、Log4j 2 は YAML および JSON 構成ファイルもサポートしています。別の構成ファイル形式を使用するように Log4j 2 を構成するには、次の例に示すように、適切な依存関係をクラスパスに追加し、選択したファイル形式に合わせて構成ファイルに名前を付けます。

フォーマット 依存関係 ファイル名

YAML

com.fasterxml.jackson.core:jackson-databind + com.fasterxml.jackson.dataformat:jackson-dataformat-yaml

log4j2.yaml + log4j2.yml

JSON

com.fasterxml.jackson.core:jackson-databind

log4j2.json + log4j2.jsn

複合構成を使用して Log4j2 を構成する

Log4j 2 は、複数の構成ファイルを 1 つの複合構成に結合することをサポートしています。Spring Boot でこのサポートを使用するには、1 つ以上の 2 次構成ファイルの場所を使用して logging.log4j2.config.override を構成します。プライマリのソースが Spring Boot のデフォルト、log4j.xml などの標準の場所、logging.config プロパティで構成された場所であるかどうかに関係なく、セカンダリ構成ファイルはプライマリ構成とマージされます。