SpringbootアプリケーションをPCFにデプロイしました。環境変数に基づいてメッセージをログに記録したいのですが、アプリケーションを再起動せずにランタイムログレベルの変更が機能するようにするにはどうすればよいですか?
Spring Boot 1.5+のログレベルの変更は、httpエンドポイントを使用して実行できます。
追加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
そしてあなたが使用できるより
curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch" \
-H "Content-Type: application/json; charset=utf-8" \
-d $'{
"configuredLevel": "WARN"
}'
/ loggers /以外のすべてがロガーの名前です。
これをPCFで実行するとさらに良くなります:これはバックエンドから直接サポートされます。
これは、@ Michael Simonsの回答の延長です。このメソッドを使用すると、それを行うためのUIがあります。
この方法は少し長くなりますが、解決するはるかに多くです。 Spring Boot Admin Serverというツールを使用します。
まず、いくつかの依存関係を含める必要があります
<!--Dependency for registering your app as a Spring Boot Admin Server-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.3.3</version>
</dependency>
<!--Provide a Nice looking ui-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.3.3</version>
</dependency>
<!--Dependency for registering your app as a Spring Boot Admin Client-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
注釈@EnableAdminServer
を使用して、アプリをSpring Boot管理サーバーにすることができます。
@SpringBootApplication
@EnableAdminServer
public class Application {
public static void main(String[] args) {
// ... your code as before ...
}
}
application.properties
に次を追加します。
まだあなたのアプリであるSpring Boot Admin Serverにアプリを登録します
spring.boot.admin.url=http://localhost:8031
クライアントを見つける場所をSpring Boot Admin Serverに指示する
// For versions 2.*.*
spring.boot.admin.client.url=http://localhost:8031
// For versions 1.*.*
spring.boot.admin.client.service-url=http://localhost:8031
spring.boot.admin.client.management-url=http://localhost:8031
spring.boot.admin.client.health-url=http://localhost:8031/health
logback.xml
に次の行<jmxConfigurator/>
を追加します。これにより、JMXを介したログバックの構成が可能になります。詳細 こちら
...およびvoila完了です。これで、実行時に任意のロガーのデバッグレベルを変更できます。
私。 Spring Boot管理サーバーのURLにアクセスしてください。ここでは、ここ(http:/localhost:8031
)にアクセスします。
ii。登録されたアプリケーション(クライアント)のリストがホームページに表示されます。
iii。登録済みのクライアントに対してDetails
をクリックすると、別のページに移動します。
iv。 Logging
タブをクリックして、アプリケーションに登録されているすべてのロガーをリストします。
v。実行時にログレベルを変更するログレベルを変更できます。ここにあなたが期待するもののスニペットがあります
Spring Boot 1.5.x以降、 ロガーエンドポイントを使用してPOST目的のロギングレベル にできます。
logback
apiを使用してプロジェクトのロギングを構成している場合、logback
apiのAutoScan機能を使用できます。 。ドキュメントごとに
logback-classicは、構成ファイルの変更をスキャンし、構成ファイルが変更されると自動的に再構成します。 logback-classicに構成ファイルの変更をスキャンし、自動的に再構成するように指示するには、要素のscan属性をtrueに設定します。
<configuration scan="true">
...
</configuration>
スキャン頻度: "By default, the configuration file will be scanned for changes once every minute
"。詳細については、logback
APIドキュメント を参照してください。
Spring Boot 2.1.5+の場合:
まず、アクチュエータプラグインが必要です。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
次に、コメントでデニスが言ったようにエンドポイントを公開する必要があります(loggers
はデフォルトで無効になっています):
management.endpoints.web.exposure.include=health,info,loggers
最後に、Rest Endpointsを使用してロガーに関する情報を取得し、ログレベルを設定できます。
curl -X "GET" "http://localhost:8080/actuator/loggers"
Root
ロギングレベルを設定するには、使用できます
curl -X "POST" "http://localhost:8080/actuator/loggers/ROOT" -H "Content-Type: application/json; charset=utf-8" -d $'{ "configuredLevel": "INFO" }'
デフォルトのロギングプロバイダーはlogbackです。実行時にログレベルを変更できるようにシステムをセットアップするには、次の手順を実行する必要があります。
最初にsrc/main/resources
でlogback-spring.xml
という名前のカスタムログバック構成を作成します。これには、Springのデフォルトコンフィギュレーターが含まれ、JMX経由でログバック構成を公開するディレクティブを追加します。
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator />
</configuration>
Jolokia JMX-over-HTTPブリッジへの依存関係を追加します:org.jolokia:jolokia-core
。
これで、スプリングブートアプリケーションの/jolokia
エンドポイントにアクセスできるはずです。プロトコルは ここに記載 です。それはきれいではありません。はじめに、ブラウザから直接ヒットできるGET
の例をいくつか示します。
ルートロガーレベルを表示:
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/getLoggerLevel/ROOT
ROOTロガーレベルをデバッグに変更します。
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/setLoggerLevel/ROOT/debug
spring-boot-actuatorは/jolokia
エンドポイントを認識しており、sensitive=true
とマークされているため、クラスパスにspring-securityがある場合は認証が必要です。