web-dev-qa-db-ja.com

.warとしてデプロイされた場合のSpring-Bootログ構成

単純なSpring-Bootアプリケーションが.warファイルとしてパッケージ化されており、外部のTomcatコンテナーにデプロイできます。クラスパス(/ WEB-INF/classes)にlogback.xml(以下)がありますが、Tomcatにデプロイすると、ログはファイルに書き込まれません。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.springframework.web" level="DEBUG"/>
</configuration>
14
elpisu

私は同じ問題に苦労してきました-ロギングは単体テストから正常に機能し、アプリケーションの「main()」メソッドを実行しますが、Tomcatでは構成を完全に無視します。

起動時に、Tomcatは環境変数「LOGGING_CONFIG」を設定して「logging.properties」ファイルの場所を記述していることがわかりました。これは、Tomcat/bin/catalina.shまたは(.bat)で確認できます。

Spring Bootは起動時に環境も読み取り、構成のスマートな処理の一環として、LOGGING_CONFIGを「logging.config」に変換すると思います。これは、ログ構成の場所をオーバーライドできるようにするために使用するプロパティです。

問題は、その値をファイル名として処理してロードしようとすることです(実際にはファイル名ではなく、ファイルを記述するJavaシステムプロパティ))が、失敗し、ロギングを適切に初期化せず、デフォルトでTomcatのセットアップを続行します。

解決策は、環境変数が最初に設定されていることを確認することであるように見えます。たとえば、(your IDEにはこれに対するオプションが必要です-Intellijで実行->構成の編集->環境に移動します変数->以下から名前と値を入力します):

set logging.config=classpath:/logback.xml

Spring Bootは、TomcatのLOGGING_CONFIGよりもこれを使用し、期待どおりに機能します。

ただし、これまでのところ、application.propertiesなどの構成ファイル内からこれを機能させることはできませんでした。つまり、これは、そのTomcatインスタンスにデプロイされたすべてのアプリケーションのグローバル設定です。

編集:これは、環境変数がとにかくローカル構成をオーバーライドするという事実によるものです。これは他のすべての場合ですが、これはあなたが望むものです:-(

編集2:Spring Boot 1.1.6の時点で、この問題は回避されていることを確認できます。警告としてログに記録され、既存の(そして正しい)ログ構成を引き続き使用します。残念ながら、logback.xmlファイル内の警告メッセージ自体を無効にすることはできません。

26
Patrick Herrera