4.4。ジャーナル
春ブーツを使用Commons Logging
、すべての内部ログのために、しかし、ログが開いた状態の基礎となることを実現します。するためにJava Util Logging
、Log4J2
およびLogback
デフォルトのコンフィギュレーションを提供します。それぞれの場合に、レコーダはまた、オプションの出力ファイルを提供しながら、コンソール出力を使用するように事前に構成されています。
デフォルトでは、前菜場合は、Logbackロギングを使用しました。Logbackまた、その使用のJava Utilのロギングを確保するために、適切な経路を含め、コモンズロギング、Log4JのかSLF4J依存ライブラリが動作することができます。
4.4.1。ログフォーマット
次の例のように春ブーツデフォルトのログ出力:
2019-11-11 11:51:57.697 INFO 16640 --- [ main] study.hwj.springboot.MyApplication : The following profiles are active: dev
2019-11-11 11:51:58.910 INFO 16640 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
- 日時:ミリ秒の精度、簡単にソートします。
- ログレベル:ERROR、WARN、INFO、DEBUG、またはTRACE。
- プロセスID。
---
実際のログメッセージを区別するために区切り文字を開始します。- スレッド名:角括弧(コンソール出力のためには、切り捨てられる可能性があります)。
- ロガー名前:これは通常、ソースクラス名(通常は省略)です。
- ログメッセージ。
致命的なレベルをLogbackません。それはERRORにマッピングされています。
4.4.2。コンソール出力
メッセージは、コンソールへのメッセージバックに書き込まれ、デフォルトのログ設定。デフォルトでは、記録ERRORは、WARNおよびINFOレベルのメッセージ。また、使用することができ--debug
、アプリケーションを起動し、「デバッグ」モードフラグを有効にします。
色分けされた出力
お使いの端末サポートしている場合はANSI
、読みやすさを向上させるためにカラー出力を使用しています。あなたは、設定できるspring.output.ansi.enabled
自動検出を無効にします。
使用して%clr
構成された変換色符号語を。最も簡単な変換例:
%clr(%5p)
次の表は、ログレベルへの色のマッピングを説明します。
ログレベル | カラー |
---|---|
FATAL | 赤 |
エラー | 赤 |
WARN | 黄色 |
INFO | グリーン |
デバッグ | グリーン |
トレース | グリーン |
その色やスタイルで使用することを指定するには、オプションの変換のために提供します。例えば、黄色のテキストを作るために、次の設定を使用します。
%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
これは、次の色とスタイルをサポートしています。
- 青
- シアン
- 気絶
- 緑
- マゼンタ
- 赤
- 黄
4.4.3。ファイル出力
デフォルトでは、春ブーツは、ログ・ファイルを書き込みませんが、コンソールに記録しました。ログファイルを書き込むためのコンソール出力、外部たく加えて設定する必要がある場合logging.file.name
またはlogging.file.path
属性が(例えば、application.propertiesで)。
ロギングプロパティ:
logging.file.name | logging.file.path | 例 | 説明 |
---|---|---|---|
(なし) | (なし) | コンソールが唯一のレコード。 | |
特定のファイル | (なし) | my.log | 指定されたログファイルに書き込まれます。名前は、それが現在のディレクトリに相対することができ、正確な位置とすることができます。 |
(なし) | 特定のディレクトリ | / var / log | 書き込みspring.log指定されたディレクトリ。名前は、それが現在のディレクトリに相対することができ、正確な位置とすることができます。 |
ログファイルのローテーションを10 MBに達すると、コンソール出力と同じように、デフォルトではERRORは、WARN記録され、INFOメッセージの場合。あなたは使用することができlogging.file.max-size
、サイズ制限を変更するプロパティを。あなたが設定していない限りlogging.file.max-history
、無期限の属性、アーカイブファイルのそれ以外の場合は、前の回転を。ログ・ファイルの合計サイズを使用することができるlogging.file.total-size-cap
上限を設定します。ログ・アーカイブの合計サイズがしきい値を超えた場合、バックアップは削除されます。アプリケーションが起動アーカイブログをクリアするために強制するには、使用してlogging.file.clean-history-on-start
プロパティを。
実際のロギングインフラストラクチャの独立した性質をロギング。結果は、春ブーツの具体的な構成は、(例えば、Logbackキーを管理しませんlogback.configurationFile
)。
4.4.4。ログレベル
サポートされているすべてのロギングシステムは(例えば、application.propertiesを使用して)ログレベルスプリング環境で提供することができる、logging.level.<logger-name>=<level>
レベルが1つのトレース、DEBUG、INFO、WARN、ここ FATAL、ERROR、 またはオフ。ルートロガーを使用することによって可能logging.level.root
に構成すること。
次の例が示すログapplication.propertiesに記録されているデフォルト設定:
logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error
また、ログレベルを設定するには、環境変数を使用することができます。例えば、LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG
設定org.springframework.web
DEBUGに。
上記の方法は、唯一のパッケージレベルのログに適用されます。緩い環境変数バインディングは常に小文字に変換しているので、このように一つのクラスのロギングのために配置することができません。ログクラスを設定するときは、SPRING_APPLICATION_JSON変数を使用することができます。
4.4.5。ログ・グループ
レコードは一緒にグループ化することができ、多くの場合、それらを同時に設定することができて便利です。たとえば、あなたは通常、すべてのログレベルTomcatのロガーを変更できますが、おそらくトップレベルのパッケージを覚えていません。
この問題を解決するために、春の環境での春のブートを使用すると、ログ・グループを定義することができます。例えば、そのメソッドのapplication.propertiesのあなたの方法に追加され、「Tomcatの」グループによって定義されます。
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
定義されたら、あなたはすべてのロガーのグループレベルでのライン構成の変更を使用することができます。
logging.level.tomcat=TRACE
グループ春ブーツが事前に定義含む方法ロギング、それらを直接使用することができます。
名前 | ロガー |
---|---|
web |
org.springframework.core.codec、org.springframework.http、org.springframework.web、org.springframework.boot.actuate.endpoint.web、org.springframework.boot.web.servlet.ServletContextInitializerBeans |
sql |
org.springframework.jdbc.core、のorg.hibernate.SQL、org.jooq.tools.LoggerListener |
4.4.6。カスタムログの構成
様々なロギングシステムを有効にするには、クラス春の環境属性をルート・ディレクトリ・パスにあることができるか、クラスライブラリの適切なパスを含めることによりlogging.config
、さらにカスタマイズさまざまなロギングシステムに指定した場所に適切な設定ファイルを提供しています。
あなたは使用することができorg.springframework.boot.logging.LoggingSystem
、特定のシステム・プロパティを使用するように春ブーツロギングシステムを強制します。値はLoggingSystemが達成完全修飾クラス名でなければなりません。あなたはまた、完全に値noneを使用していないことで春ブートログ設定を無効にすることができます。
-Dorg.springframework.boot.logging.LoggingSystem=none
ロギングがあったのでApplicationContext
作成が初期化され、したがって、ない春から前に、@Configuration
制御ファイルの@PropertySources
ログ。ロギングシステムを変更するか、それが完全にプロパティを介してシステムを無効にするための唯一の方法です。
ロギングシステムの負荷異なるコンフィギュレーションファイルによって:
ログシステム|システム構成ファイルを記録
--- | ---
Logback | logback-spring.xml、logback-spring.groovy、logback.xml、またはlogback.groovy
Log4j2 | log4j2またはlog4j2.xml -spring.xml
JDK |(JavaのUtilのロギング)logging.properties
私たちは、あなたがすることをお勧めします-spring
(例えば、ログ構成のためのバリアントlogback-spring.xml
代わりにlogback.xml
)。あなたは、標準設定の場所を使用する場合は、春は完全にログの初期化を制御しません。
「実行可能なjarファイル」実行時、JavaのUtilのログから、問題を引き起こす可能性がありますいくつかの既知のクラスローディングの問題があります。私たちは、あなたが「実行可能なjarファイル」実行時から可能な限りそれを使用しないことをお勧めします。
次の表カスタマイズを助けるために、春の環境での属性の一部は、システムのプロパティで配置されてもよいです。
春の環境 | システムプロパティ | リマーク |
---|---|---|
logging.exception-conversion-word |
LOG_EXCEPTION_CONVERSION_WORD | 異常な使用にレコード変換ワード。 |
logging.file.clean-history-on-start |
LOG_FILE_CLEAN_HISTORY_ON_START | かどうか(LOG_FILEを有効にした場合)、起動時にアーカイブログファイルをクリアします。(のみデフォルト設定Logbackはサポートされています。) |
logging.file.name |
LOG_FILE | 定義された場合は、デフォルトのログ設定を使用します。 |
logging.file.max-size |
LOG_FILE_MAX_SIZE | ログファイルの最大サイズ(LOG_FILEを有効にした場合)。(のみデフォルト設定Logbackはサポートされています。) |
logging.file.max-history |
LOG_FILE_MAX_HISTORY | アーカイブ・ログの最大数は、あなたが(LOG_FILEを有効にした場合)、ファイルを保存しておきたいです。(のみデフォルト設定Logbackはサポートされています。) |
logging.file.path |
開き、log_path | 定義された場合は、デフォルトのログ設定を使用します。 |
logging.file.total-size-cap |
LOG_FILE_TOTAL_SIZE_CAP | あなたは(有効な場合LOG_FILE)を維持したいログのバックアップの合計サイズ。(のみデフォルト設定Logbackはサポートされています。) |
logging.pattern.console |
CONSOLE_LOG_PATTERN | コンソール上で使用するためのログ・モード(標準出力)。(のみデフォルト設定Logbackはサポートされています。) |
logging.pattern.dateformat |
LOG_DATEFORMAT_PATTERN | 追加モード記録の日付形式。(のみデフォルト設定Logbackはサポートされています。) |
logging.pattern.file |
FILE_LOG_PATTERN | (LOG_FILEが有効な場合)ログモードでは、ファイルで使用されます。(のみデフォルト設定Logbackはサポートされています。) |
logging.pattern.level |
LOG_LEVEL_PATTERN | ログレベル(デフォルト%の5P)をレンダリングする際のフォーマットを使用しました。(のみデフォルト設定Logbackはサポートされています。) |
logging.pattern.rolling-file-name |
ROLLING_FILE_NAME_PATTERN | モード遷移ログファイル名(デフォルト$ {LOG_FILE}。%のD {YYYY-MM-DD}。%I.gz)。(のみデフォルト設定Logbackはサポートされています。) |
PID |
PID | 現在のプロセスID(可能ならば、まだそれはOSの環境変数として定義されているが発見されます)。 |
その設定ファイルを解析すると、すべてのロギングシステムサポートシステムプロパティを使用することができます。例えば、春-boot.jarのデフォルトの設定を参照してください。
- Logback
- Log4jの2
- Javaの使用率ロギング
あなたはログのプロパティでプレースホルダを使用する場合は、構文の構文ではなく、春ブーツの基本的なフレームワークを使用する必要があります。それはあなたがLogbackを使用している場合、彼らはしなければならない、ということに注目すべきである:
デフォルト値にプロパティ名とのセパレータとして使用され、使用すべきではありません:-
。
您可以通过仅覆盖LOG_LEVEL_PATTERN
(或使用Logback的logging.pattern.level
)将MDC和其他临时内容添加到日志行。例如,如果使用logging.pattern.level=user:%X{user} %5p
,则默认日志格式包含“ user”的MDC条目(如果存在),如以下示例所示。
2019-11-11 15:38:24.830 requestId:c60b9602-d273-4173-8ca2-2a3f2f2b438d INFO 1980 --- [nio-8080-exec-1] study.hwj.springboot.MyController : MyController...ttttt
4.4.7。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]]
特定于Profile的配置
使用<springProfile>
标签,您可以根据激活的Spring Profiles选择包括或排除配置部分。Profile部分在<configuration>
标签内的任何位置都受支持。使用name
属性指定哪个 Profile 接受配置。<springProfile>
标签可包含一个简单的 Profile 的名称(例如staging)或 Profile 表达式。Profile 表达式允许表达更复杂的 Profile 逻辑,例如production & (eu-central | eu-west
)。有关更多详细信息,请参阅参考指南。以下清单显示了三个样本 Profiles:
<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属性让Logback使用。如果您想从Logback配置中访问application.properties文件中的值,这样做会很有用。该标签的工作方式类似于Logback的标准<property>
标签。但是,您无需直接指定value
,而是指定source
属性(来自Environment)。如果需要将属性存储在local
范围之外的其他位置,则可以使用scope
属性。如果需要fallback值(以防未在Environment中设置属性),则可以使用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中。
Spring Boot日志原理
参考源码:
使用org.springframework.boot.context.logging.LoggingApplicationListener
监听器监听多个事件:
ApplicationStartingEvent.class,
ApplicationEnvironmentPreparedEvent.class,
ApplicationPreparedEvent.class,
ContextClosedEvent.class,
ApplicationFailedEvent.class
在触发ApplicationStartingEvent
事件时,初始化日志系统,参考org.springframework.boot.logging.LoggingSystem#get(java.lang.ClassLoader)