web-dev-qa-db-ja.com

スプリングブートアプリケーションを再起動せずにランタイムでログレベルを変更する方法

SpringbootアプリケーションをPCFにデプロイしました。環境変数に基づいてメッセージをログに記録したいのですが、アプリケーションを再起動せずにランタイムログレベルの変更が機能するようにするにはどうすればよいですか?

33
Samir Padhy

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で実行するとさらに良くなります:これはバックエンドから直接サポートされます。

38
Michael Simons

これは、@ Michael Simonsの回答の延長です。このメソッドを使用すると、それを行うためのUIがあります。

この方法は少し長くなりますが、解決するはるかに多くです。 Spring Boot Admin Serverというツールを使用します。

  1. まず、いくつかの依存関係を含める必要があります

    <!--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>
    
  2. 注釈@EnableAdminServerを使用して、アプリをSpring Boot管理サーバーにすることができます。

    @SpringBootApplication
    @EnableAdminServer
    public class Application {
       public static void main(String[] args) {
          // ... your code as before ...
       }
    }
    
  3. 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
    
  4. logback.xmlに次の行<jmxConfigurator/>を追加します。これにより、JMXを介したログバックの構成が可能になります。詳細 こちら

...およびvoila完了です。これで、実行時に任意のロガーのデバッグレベルを変更できます。

私。 Spring Boot管理サーバーのURLにアクセスしてください。ここでは、ここ(http:/localhost:8031)にアクセスします。

ii。登録されたアプリケーション(クライアント)のリストがホームページに表示されます。

iii。登録済みのクライアントに対してDetailsをクリックすると、別のページに移動します。

iv。 Loggingタブをクリックして、アプリケーションに登録されているすべてのロガーをリストします。

v。実行時にログレベルを変更するログレベルを変更できます。ここにあなたが期待するもののスニペットがあります

Change logging levels at runtime

9
Kihats
9
luboskrnac

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 "。詳細については、logbackAPIドキュメント を参照してください。

8
Sai prateek

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" }'
4
Alexander Weiß

デフォルトのロギングプロバイダーはlogbackです。実行時にログレベルを変更できるようにシステムをセットアップするには、次の手順を実行する必要があります。

最初にsrc/main/resourceslogback-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がある場合は認証が必要です。

3
Andy Brown