ログ
Spring Boot は、すべての内部ロギングに Commons Logging [Apache] (英語) を使用しますが、基礎となるログ実装はオープンなままです。Java Util Logging (標準 Javadoc) 、Log4j2 [Apache] (英語) 、Logback (英語) のデフォルト構成が提供されています。いずれの場合も、ロガーはコンソール出力を使用するように事前設定されており、オプションのファイル出力も利用できます。
デフォルトでは、スターターを使用する場合、ログ記録には Logback が使用されます。Java Util Logging、Commons Logging、Log4J、SLF4J を使用する依存ライブラリがすべて正しく動作することを保証するために、適切な Logback ルーティングも含まれています。
Java には多くのロギングフレームワークがあります。上記のリストがわかりにくい場合でも心配不要です。通常、ロギングの依存関係を変更する必要はなく、Spring Boot のデフォルトは問題なく機能します。 |
アプリケーションをサーブレットコンテナーまたはアプリケーションサーバーにデプロイする場合、Java Util Logging API を使用して実行されたログはアプリケーションのログにルーティングされません。これにより、コンテナーまたはコンテナーにデプロイされた他のアプリケーションによって実行されたログがアプリケーションのログに表示されなくなります。 |
ログ形式
Spring Boot からのデフォルトのログ出力は、次の例のようになります。
2024-12-19T12:20:01.008Z INFO 126552 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Starting MyApplication using Java 17.0.13 with PID 126552 (/opt/apps/myapp.jar started by myuser in /opt/apps/)
2024-12-19T12:20:01.029Z INFO 126552 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : No active profile set, falling back to 1 default profile: "default"
2024-12-19T12:20:05.080Z INFO 126552 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-12-19T12:20:05.139Z INFO 126552 --- [myapp] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-12-19T12:20:05.140Z INFO 126552 --- [myapp] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.34]
2024-12-19T12:20:05.333Z INFO 126552 --- [myapp] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-12-19T12:20:05.339Z INFO 126552 --- [myapp] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3953 ms
2024-12-19T12:20:06.470Z INFO 126552 --- [myapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2024-12-19T12:20:06.527Z INFO 126552 --- [myapp] [ main] o.s.b.d.f.logexample.MyApplication : Started MyApplication in 7.719 seconds (process running for 8.989)
2024-12-19T12:20:06.549Z INFO 126552 --- [myapp] [ionShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete
2024-12-19T12:20:06.590Z INFO 126552 --- [myapp] [tomcat-shutdown] o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete
次の項目が出力されます。
日時: ミリ秒単位の精度で簡単にソート可能。
ログレベル:
ERROR
、WARN
、INFO
、DEBUG
、TRACE
プロセス ID。
実際のログメッセージの開始を区別する
---
セパレータ。アプリケーション名: 角括弧 に囲まれています (
spring.application.name
が設定されている場合のみデフォルトでログに記録されます)アプリケーショングループ: 角括弧 に囲まれています (
spring.application.group
が設定されている場合のみデフォルトでログに記録されます)スレッド名: 角括弧で囲まれています(コンソール出力では切り捨てられる場合があります)。
相関 ID: トレースが有効な場合 (上のサンプルには示されていません)
ロガー名: これは通常、ソースクラス名です(多くの場合省略されます)。
ログメッセージ。
Logback には FATAL レベルはありません。ERROR にマップされます。 |
spring.application.name プロパティがあるがログに記録したくない場合は、logging.include-application-name を false に設定できます。 |
spring.application.group プロパティがあるがログに記録したくない場合は、logging.include-application-group を false に設定できます。 |
相関 ID の詳細については、このドキュメントを参照してください。 |
コンソール出力
デフォルトのログ構成では、メッセージが書き込まれるとコンソールにエコーされます。デフォルトでは、ERROR
-level、WARN
-level、および INFO
-level メッセージがログに記録されます。--debug
フラグを使用してアプリケーションを起動することにより、「デバッグ」モードを有効にすることもできます。
$ java -jar myapp.jar --debug
application.properties で debug=true を指定することもできます。 |
デバッグモードを有効にすると、コアロガー(埋め込みコンテナー、Hibernate、Spring Boot)の選択がより多くの情報を出力するように構成されます。デバッグモードを有効にしても、DEBUG
レベルのすべてのメッセージをログに記録するようにアプリケーションが設定されるわけではありません。
または、--trace
フラグ(または application.properties
の trace=true
)を使用してアプリケーションを開始することにより、「トレース」モードを有効にすることができます。これにより、選択されたコアロガー(埋め込みコンテナー、Hibernate スキーマ生成、Spring ポートフォリオ全体)のトレースログが有効になります。
色分けされた出力
ターミナルが ANSI をサポートしている場合は、読みやすくするためにカラー出力が使用されます。spring.output.ansi.enabled
をサポートされている値 (Javadoc) に設定して、自動検出をオーバーライドできます。
カラーコーディングは、%clr
変換ワードを使用して構成されます。最も単純な形式では、次の例に示すように、コンバーターはログレベルに従って出力に色を付けます。
%clr(%5p)
次の表に、ログレベルと色のマッピングを示します。
レベル | 色 |
---|---|
| 赤 |
| 赤 |
| 黄 |
| 緑 |
| 緑 |
| 緑 |
または、変換のオプションとして使用することにより、使用する色またはスタイルを指定できます。例: テキストを黄色にするには、次の設定を使用します。
%clr(%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}){yellow}
次の色とスタイルがサポートされています。
blue
cyan
faint
green
magenta
red
yellow
ファイル出力
デフォルトでは、Spring Boot はコンソールにのみログを記録し、ログファイルに書き込みません。コンソール出力に加えてログファイルにも書き込みたい場合は、logging.file.name
または logging.file.path
プロパティを設定する必要があります (たとえば、application.properties
で)。両方のプロパティが設定されている場合、logging.file.path
は無視され、logging.file.name
のみが使用されます。
次の表は、logging.*
プロパティを一緒に使用する方法を示しています。
logging.file.name | logging.file.path | 説明 |
---|---|---|
(なし) | (なし) | コンソールのみのロギング。 |
特定のファイル (たとえば、 | (なし) |
|
(なし) | 特定のディレクトリ (たとえば、 |
|
特定のファイル | 特定のディレクトリ |
|
ログファイルは 10MB に達するとローテーションし、コンソール出力と同様に、ERROR
-level、WARN
-level、および INFO
-level メッセージがデフォルトでログに記録されます。
ロギングプロパティは、実際のロギングインフラストラクチャから独立しています。その結果、特定の構成キー(Logback の logback.configurationFile など)は spring Boot によって管理されません。 |
ファイルのローテーション
Logback を使用している場合は、application.properties
または application.yaml
ファイルを使用してログローテーション設定を微調整することができます。他のすべてのロギングシステムでは、ローテーション設定を自分で直接構成する必要があります (たとえば、Log4j2 を使用している場合は、log4j2.xml
または log4j2-spring.xml
ファイルを追加できます)。
次のローテーションポリシープロパティがサポートされています。
名前 | 説明 |
---|---|
| ログアーカイブの作成に使用されるファイル名パターン。 |
| アプリケーションの起動時にログアーカイブのクリーンアップが必要な場合。 |
| アーカイブされる前のログファイルの最大サイズ。 |
| ログアーカイブが削除されるまでにかかる最大サイズ。 |
| 保持するアーカイブログファイルの最大数(デフォルトは 7)。 |
ログレベル
サポートされているすべてのログシステムでは、logging.level.<logger-name>=<level>
を使用して、Spring Environment
(Javadoc) (たとえば、application.properties
) でロガーレベルを設定できます。level
は、TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF のいずれかです。root
ロガーは、logging.level.root
を使用して設定できます。
次の例は、application.properties
の潜在的なロギング設定を示しています。
プロパティ
YAML
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
logging:
level:
root: "warn"
org.springframework.web: "debug"
org.hibernate: "error"
環境変数を使用してログレベルを設定することもできます。例: LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG
は org.springframework.web
を DEBUG
に設定します。
上記の方法は、パッケージレベルのログ記録にのみ有効です。緩和バインディングでは環境変数が常に小文字に変換されるため、この方法では個々のクラスのログ記録を構成することはできません。クラスのログ記録を構成する必要がある場合は、SPRING_APPLICATION_JSON 変数を使用できます。 |
ロググループ
関連するロガーをグループ化して、すべてを同時に構成できると便利なことがよくあります。例: Tomcat 関連のすべてのロガーのログレベルを一般的に変更する可能性がありますが、トップレベルのパッケージを簡単に覚えることはできません。
これを支援するために、Spring Boot では、Spring Environment
(Javadoc) でロググループを定義できます。例: application.properties
に追加して "tomcat" グループを定義する方法は次のとおりです。
プロパティ
YAML
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging:
group:
tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"
定義したら、グループ内のすべてのロガーのレベルを 1 行で変更できます。
プロパティ
YAML
logging.level.tomcat=trace
logging:
level:
tomcat: "trace"
Spring Boot には、すぐに使用できる次の事前定義されたロギンググループが含まれています。
名前 | ロガー |
---|---|
web |
|
sql |
|
Using a Log Shutdown Hook
In order to release logging resources when your application terminates, a shutdown hook that will trigger log system cleanup when the JVM exits is provided.
This shutdown hook is registered automatically unless your application is deployed as a war file.
If your application has complex context hierarchies the shutdown hook may not meet your needs.
If it does not, disable the shutdown hook and investigate the options provided directly by the underlying logging system.
For example, Logback offers context selectors (英語) which allow each Logger to be created in its own context.
You can use the logging.register-shutdown-hook
property to disable the shutdown hook.
Setting it to false
will disable the registration.
You can set the property in your application.properties
or application.yaml
file:
-
Properties
-
YAML
logging.register-shutdown-hook=false
logging:
register-shutdown-hook: false
Custom Log Configuration
The various logging systems can be activated by including the appropriate libraries on the classpath and can be further customized by providing a suitable configuration file in the root of the classpath or in a location specified by the following Spring Environment
(Javadoc) property: logging.config
.
You can force Spring Boot to use a particular logging system by using the org.springframework.boot.logging.LoggingSystem
system property.
The value should be the fully qualified class name of a LoggingSystem
(Javadoc) implementation.
You can also disable Spring Boot’s logging configuration entirely by using a value of none
.
Since logging is initialized before the ApplicationContext (Javadoc) is created, it is not possible to control logging from @PropertySources (Javadoc) in Spring @Configuration (Javadoc) files.
The only way to change the logging system or disable it entirely is through System properties.
|
Depending on your logging system, the following files are loaded:
Logging System | Customization |
---|---|
Logback |
|
Log4j2 |
|
JDK (Java Util Logging) |
|
可能な場合、ロギング構成に -spring バリアントを使用することをお勧めします(たとえば、logback.xml ではなく logback-spring.xml )。標準の構成場所を使用する場合、Spring はログの初期化を完全に制御できません。 |
Java Util Logging には、「実行可能な jar」から実行するときに課題を引き起こす既知のクラスローディングの課題があります。「実行可能な jar」から実行する場合は、可能な限り回避することをお勧めします。 |
カスタマイズを容易にするために、他のいくつかのプロパティが Spring Environment
(Javadoc) からシステムプロパティに転送されます。これにより、システム構成をログに記録してプロパティを使用できるようになります。例: application.properties
または LOGGING_FILE_NAME
で logging.file.name
を環境変数として設定すると、LOG_FILE
システムプロパティが設定されます。転送されるプロパティについては、次の表で説明します。
Spring 環境 | システムプロパティ | コメント |
---|---|---|
|
| 例外を記録するときに使用される変換語。 |
|
| 定義されている場合、デフォルトのログ構成で使用されます。 |
|
| 定義されている場合、デフォルトのログ構成で使用されます。 |
|
| コンソール(stdout)で使用するログパターン。 |
|
| ログ日付形式のアペンダーパターン。 |
|
| コンソールログに使用する文字セット。 |
|
| コンソールロギングに使用するログレベルのしきい値。 |
|
| ファイルで使用するログパターン( |
|
| ファイルロギングに使用する文字セット( |
|
| ファイルのロギングに使用するログレベルのしきい値。 |
|
| ログレベルをレンダリングするときに使用する形式(デフォルト |
|
| コンソールログに使用する構造化ログ形式。 |
|
| ファイルログに使用する構造化ログ形式。 |
|
| 現在のプロセス ID(可能な場合、OS 環境変数としてまだ定義されていない場合に検出されます)。 |
Logback を使用する場合、次のプロパティも転送されます。
Spring 環境 | システムプロパティ | コメント |
---|---|---|
|
| ロールオーバーされたログファイル名のパターン(デフォルト |
|
| 起動時にアーカイブログファイルをクリーンアップするかどうか。 |
|
| ログファイルの最大サイズ。 |
|
| 保持するログバックアップの合計サイズ。 |
|
| 保持するアーカイブログファイルの最大数。 |
サポートされているすべてのログシステムは、構成ファイルを解析するときにシステムプロパティを参照できます。例については、spring-boot.jar
のデフォルト構成を参照してください。
ロギングプロパティでプレースホルダーを使用する場合は、基になるフレームワークの構文ではなく、Spring Boot の構文を使用する必要があります。特に、Logback を使用する場合は、 |
|
構造化ログ
構造化ログは、ログ出力が明確に定義され、多くの場合は機械可読な形式で書き込まれる手法です。Spring Boot は構造化ログをサポートしており、次の JSON 形式をすぐに使用できます。
構造化ログを有効にするには、プロパティ logging.structured.format.console
(コンソール出力の場合) または logging.structured.format.file
(ファイル出力の場合) を、使用する形式の ID に設定します。
カスタムログ設定を使用している場合は、CONSOLE_LOG_STRUCTURED_FORMAT
および FILE_LOG_STRUCTURED_FORMAT
システムプロパティを考慮するように構成を更新します。CONSOLE_LOG_STRUCTURED_FORMAT
を例に挙げます。
Logback
Log4j2
<!-- replace your encoder with StructuredLogEncoder -->
<encoder class="org.springframework.boot.logging.logback.StructuredLogEncoder">
<format>${CONSOLE_LOG_STRUCTURED_FORMAT}</format>
<charset>${CONSOLE_LOG_CHARSET}</charset>
</encoder>
Spring Boot に含まれるデフォルト設定を参照することもできます。
<!-- replace your PatternLayout with StructuredLogLayout -->
<StructuredLogLayout format="${sys:CONSOLE_LOG_STRUCTURED_FORMAT}" charset="${sys:CONSOLE_LOG_CHARSET}"/>
Spring Boot に含まれるデフォルト設定を参照することもできます。
弾性共通スキーマ
弾性共通スキーマ (英語) は JSON ベースのログ形式です。
Elastic Common Schema ログ形式を有効にするには、適切な format
プロパティを ecs
に設定します。
プロパティ
YAML
logging.structured.format.console=ecs
logging.structured.format.file=ecs
logging:
structured:
format:
console: ecs
file: ecs
ログラインは次のようになります。
{"@timestamp":"2024-01-01T10:15:00.067462556Z","log.level":"INFO","process.pid":39599,"process.thread.name":"main","service.name":"simple","log.logger":"org.example.Application","message":"No active profile set, falling back to 1 default profile: \"default\"","ecs.version":"8.11"}
この形式では、MDC に含まれるすべてのキーと値のペアが JSON オブジェクトに追加されます。また、SLF4J 流れるようなログ記録 API (英語) を使用して、addKeyValue (英語) メソッドでログに記録された JSON オブジェクトにキーと値のペアを追加することもできます。
service
値は、logging.structured.ecs.service
プロパティを使用してカスタマイズできます。
プロパティ
YAML
logging.structured.ecs.service.name=MyService
logging.structured.ecs.service.version=1
logging.structured.ecs.service.environment=Production
logging.structured.ecs.service.node-name=Primary
logging:
structured:
ecs:
service:
name: MyService
version: 1.0
environment: Production
node-name: Primary
指定されていない場合は、logging.structured.ecs.service.name はデフォルトで spring.application.name になります。 |
指定されていない場合は、logging.structured.ecs.service.version はデフォルトで spring.application.version になります。 |
Graylog 拡張ログ形式 (GELF)
Graylog 拡張ログ形式 (英語) は、Graylog ログ分析プラットフォーム用の JSON ベースのログ形式です。
Graylog 拡張ログ形式を有効にするには、適切な format
プロパティを gelf
に設定します。
プロパティ
YAML
logging.structured.format.console=gelf
logging.structured.format.file=gelf
logging:
structured:
format:
console: gelf
file: gelf
ログラインは次のようになります。
{"version":"1.1","short_message":"No active profile set, falling back to 1 default profile: \"default\"","timestamp":1725958035.857,"level":6,"_level_name":"INFO","_process_pid":47649,"_process_thread_name":"main","_log_logger":"org.example.Application"}
この形式では、MDC に含まれるすべてのキーと値のペアが JSON オブジェクトに追加されます。また、SLF4J 流れるようなログ記録 API (英語) を使用して、addKeyValue (英語) メソッドでログに記録された JSON オブジェクトにキーと値のペアを追加することもできます。
logging.structured.gelf
プロパティを使用していくつかのフィールドをカスタマイズできます。
プロパティ
YAML
logging.structured.gelf.host=MyService
logging.structured.gelf.service.version=1
logging:
structured:
gelf:
host: MyService
service:
version: 1.0
指定されていない場合は、logging.structured.gelf.host はデフォルトで spring.application.name になります。 |
指定されていない場合は、logging.structured.gelf.service.version はデフォルトで spring.application.version になります。 |
Logstash JSON 形式
Logstash JSON 形式 [GitHub] (英語) は JSON ベースのログ形式です。
Logstash JSON ログ形式を有効にするには、適切な format
プロパティを logstash
に設定します。
プロパティ
YAML
logging.structured.format.console=logstash
logging.structured.format.file=logstash
logging:
structured:
format:
console: logstash
file: logstash
ログラインは次のようになります。
{"@timestamp":"2024-01-01T10:15:00.111037681+02:00","@version":"1","message":"No active profile set, falling back to 1 default profile: \"default\"","logger_name":"org.example.Application","thread_name":"main","level":"INFO","level_value":20000}
この形式では、MDC に含まれるすべてのキーと値のペアが JSON オブジェクトに追加されます。また、SLF4J 流れるようなログ記録 API (英語) を使用して、addKeyValue (英語) メソッドでログに記録された JSON オブジェクトにキーと値のペアを追加することもできます。
マーカー (英語) を追加すると、JSON の tags
文字列配列に表示されます。
構造化ログ JSON のカスタマイズ
Spring Boot は、構造化ログの JSON 名と値の出力に適切なデフォルトを選択しようとします。ただし、場合によっては、独自のニーズに合わせて JSON に小さな調整を加えたい場合があります。たとえば、ログ取り込みシステムの期待に一致するように、名前の一部を変更する必要がある場合があります。また、役に立たないと思われる特定のメンバーをフィルターで除外する必要がある場合もあります。
次のプロパティを使用すると、構造化ログ JSON の記述方法を変更できます。
プロパティ | 説明 |
---|---|
| JSON から特定のパスをフィルタリングします |
| JSON 内の特定のメンバーの名前を変更します |
| JSON に追加のメンバーを追加します |
例: 以下は log.level
を除外し、process.id
の名前を procid
に変更し、固定の corpname
フィールドを追加します。
プロパティ
YAML
logging.structured.json.exclude=log.level
logging.structured.json.rename.process.id=procid
logging.structured.json.add.corpname=mycorp
logging:
structured:
json:
exclude: log.level
rename:
process.id: procid
add:
corpname: mycorp
より高度なカスタマイズを行うには、StructuredLoggingJsonMembersCustomizer (Javadoc) インターフェースを実装する独自のクラスを作成し、logging.structured.json.customizer プロパティを使用して宣言します。また、実装を META-INF/spring.factories ファイルにリストして宣言することもできます。 |
その他の構造化ログ形式のサポート
Spring Boot の構造化ログサポートは拡張可能で、独自のカスタムフォーマットを定義できます。これを行うには、StructuredLogFormatter
(Javadoc) インターフェースを実装します。ジェネリクス型引数は、Logback を使用する場合は ILoggingEvent
(英語) 、Log4j2 を使用する場合は LogEvent
[Apache] (英語) にする必要があります (つまり、実装は特定のログシステムに関連付けられます)。次に、実装はログイベントで呼び出され、ログに記録する String
(標準 Javadoc) を返します。次の例を参照してください。
Java
Kotlin
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.springframework.boot.logging.structured.StructuredLogFormatter;
class MyCustomFormat implements StructuredLogFormatter<ILoggingEvent> {
@Override
public String format(ILoggingEvent event) {
return "time=" + event.getInstant() + " level=" + event.getLevel() + " message=" + event.getMessage() + "\n";
}
}
import ch.qos.logback.classic.spi.ILoggingEvent
import org.springframework.boot.logging.structured.StructuredLogFormatter
class MyCustomFormat : StructuredLogFormatter<ILoggingEvent> {
override fun format(event: ILoggingEvent): String {
return "time=${event.instant} level=${event.level} message=${event.message}\n"
}
}
例からわかるように、任意の形式で返すことができ、JSON である必要はありません。
カスタムフォーマットを有効にするには、プロパティ logging.structured.format.console
または logging.structured.format.file
を実装の完全修飾クラス名に設定します。
実装では、自動的に挿入されるいくつかのコンストラクターパラメーターを使用できます。詳細については、StructuredLogFormatter
(Javadoc) の JavaDoc を参照してください。
Logback 拡張
Spring Boot には、高度な構成に役立つ Logback の拡張機能が多数含まれています。これらの拡張機能を logback-spring.xml
構成ファイルで使用できます。
標準の logback.xml 構成ファイルのロードが早すぎるため、拡張機能を使用できません。logback-spring.xml を使用するか、logging.config プロパティを定義する必要があります。 |
拡張は Logback の構成スキャンで (英語) は使用できません。設定しようとすると、構成ファイルに変更を加えると、次のいずれかのエラーがログに記録されます。 |
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
プロファイル固有の構成
<springProfile>
タグを使用すると、アクティブな Spring プロファイルに基づいて、オプションで構成のセクションを含めたり除外したりできます。プロファイルセクションは、<configuration>
要素内のどこでもサポートされます。name
属性を使用して、構成を受け入れるプロファイルを指定します。<springProfile>
タグには、プロファイル名 ( staging
など) またはプロファイル式を含めることができます。プロファイル式を使用すると、production & (eu-central | eu-west)
など、より複雑なプロファイルロジックを表現できます。詳細については、Spring Framework リファレンスガイドを確認してください。次のリストは、3 つのサンプルプロファイルを示しています。
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
環境プロパティ
<springProperty>
タグを使用すると、Spring Environment
(Javadoc) のプロパティを公開して、Logback 内で使用できます。これを行うと、Logback 構成で application.properties
ファイルの値にアクセスする場合に便利です。このタグは、Logback の標準 <property>
タグと同様に機能します。ただし、直接 value
を指定するのではなく、プロパティの source
(Environment
(Javadoc) から) を指定します。プロパティを local
スコープ以外の場所に格納する必要がある場合は、scope
属性を使用できます。フォールバック値が必要な場合 (プロパティが Environment
(Javadoc) に設定されていない場合)、defaultValue
属性を使用できます。次の例は、Logback 内で使用するためにプロパティを公開する方法を示しています。
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
source はケバブケース (my.property-name など) で指定する必要があります。ただし、緩和されたルールを使用して、Environment (Javadoc) にプロパティを追加できます。 |
Log4j2 拡張機能
Spring Boot には、高度な構成に役立つ Log4j2 の拡張機能が多数含まれています。これらの拡張子は、任意の log4j2-spring.xml
構成ファイルで使用できます。
標準の log4j2.xml 構成ファイルのロードが早すぎるため、拡張機能を使用できません。log4j2-spring.xml を使用するか、logging.config プロパティを定義する必要があります。 |
拡張機能は、Log4J によって提供される Spring Boot サポート [Apache] (英語) に取って代わります。ビルドに org.apache.logging.log4j:log4j-spring-boot モジュールを含めないようにしてください。 |
プロファイル固有の構成
<SpringProfile>
タグを使用すると、アクティブな Spring プロファイルに基づいて、オプションで構成のセクションを含めたり除外したりできます。プロファイルセクションは、<Configuration>
要素内のどこでもサポートされます。name
属性を使用して、構成を受け入れるプロファイルを指定します。<SpringProfile>
タグには、プロファイル名 ( staging
など) またはプロファイル式を含めることができます。プロファイル式を使用すると、production & (eu-central | eu-west)
など、より複雑なプロファイルロジックを表現できます。詳細については、Spring Framework リファレンスガイドを確認してください。次のリストは、3 つのサンプルプロファイルを示しています。
<SpringProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</SpringProfile>
<SpringProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</SpringProfile>
<SpringProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</SpringProfile>
環境プロパティのルックアップ
Log4j2 構成内で Spring Environment
(Javadoc) のプロパティを参照する場合は、spring:
プレフィックス付きルックアップ [Apache] (英語) を使用できます。これは、Log4j2 構成で application.properties
ファイルの値にアクセスする場合に便利です。
次の例は、Spring Environment
(Javadoc) から spring.application.name
と spring.application.group
を読み取る applicationName
および applicationGroup
という名前の Log4j2 プロパティを設定する方法を示しています。
<Properties>
<Property name="applicationName">${spring:spring.application.name}</Property>
<Property name="applicationGroup">${spring:spring.application.group}</Property>
</Properties>
ルックアップキーはケバブケース ( my.property-name など) で指定する必要があります。 |
Log4j2 システムプロパティ
Log4j2 は、さまざまな項目を構成するために使用できる多数のシステムプロパティ [Apache] (英語) をサポートしています。例: log4j2.skipJansi
システムプロパティを使用して、Windows で ConsoleAppender
[Apache] (英語) がジャンシ [GitHub] (英語) 出力ストリームを使用するかどうかを構成できます。
Log4j2 の初期化後に読み込まれるすべてのシステムプロパティは、Spring Environment
(Javadoc) から取得できます。たとえば、application.properties
ファイルに log4j2.skipJansi=false
を追加して、ConsoleAppender
[Apache] (英語) が Windows 上で Jansi を使用するようにすることができます。
Spring Environment (Javadoc) は、システムプロパティと OS 環境変数にロードされる値が含まれていない場合にのみ考慮されます。 |
Log4j2 の初期初期化中に読み込まれるシステムプロパティは、Spring Environment (Javadoc) を参照できません。例: Log4j2 がデフォルトの Log4j2 実装を選択できるようにするために使用するプロパティは、Spring 環境が使用可能になる前に使用されます。 |