web-dev-qa-db-fra.com

comment modifier le niveau de journalisation au moment de l'exécution sans redémarrer l'application Spring Boot

J'ai déployé l'application springboot dans PCF. Je souhaite consigner le message en fonction de la variable d'environnement .Que dois-je faire pour que la modification du niveau de journalisation de l'exécution fonctionne sans redémarrer l'application?

33
Samir Padhy

La modification du niveau de journalisation dans Spring Boot 1.5+ peut être effectuée avec un noeud final http.

Ajouter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

et que vous pouvez utiliser

curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d $'{
  "configuredLevel": "WARN"
}'  

Où tout au-delà/loggers/est le nom de l'enregistreur.

Si vous utilisez ceci dans PCF, c'est encore mieux: c'est directement pris en charge par leur backend.

38
Michael Simons

Ceci est une extension de la réponse de @Michael Simons. Avec cette méthode, vous aurez une interface utilisateur pour le faire:

Cette méthode est un peu plus longue mais elle résout beaucoup plus . Nous allons utiliser un outil appelé Spring Boot Admin Server .

  1. D'abord, vous devez inclure des dépendances

    <!--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. Activez votre application en tant que serveur d'administration Spring Boot à l'aide de l'annotation @EnableAdminServer.

    @SpringBootApplication
    @EnableAdminServer
    public class Application {
       public static void main(String[] args) {
          // ... your code as before ...
       }
    }
    
  3. Dans votre application.properties ajouter ce qui suit:

    Enregistrez votre application sur le serveur Spring Boot Admin Server, qui est toujours votre application

    spring.boot.admin.url=http://localhost:8031
    

    Indiquez à Spring Boot Admin Server où trouver le client

    // 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. Dans votre logback.xml il suffit d’ajouter la ligne suivante <jmxConfigurator/>. Cela permet la configuration de la consignation via JMX. Plus d'infos ici

... et le tour est joué . Vous pouvez maintenant modifier le niveau de débogage de tout enregistreur au moment de l'exécution.

je. Il suffit de visiter l’URL de votre serveur Spring Boot Admin Server - dans notre cas ici (http:/localhost:8031).

ii. Une liste des applications (clients) enregistrées s’affiche sur la page d’accueil.

iii. Cliquez Details sur les clients enregistrés, ce qui vous mènera à une autre page.

iv. Cliquez sur l'onglet Logging qui répertorie tous les enregistreurs enregistrés dans votre application.

v. Vous pouvez modifier les niveaux de journalisation, il modifiera votre niveau de journalisation lors de l'exécution. Voici un extrait de ce que vous attendez

Change logging levels at runtime

9
Kihats
9
luboskrnac

Si vous utilisez logback api pour configurer la journalisation dans le projet, vous pouvez utiliser la fonctionnalité AutoScan de logback api. . Selon la documentation

logback-classic recherchera les modifications dans son fichier de configuration et se reconfigurera automatiquement lorsque le fichier de configuration sera modifié. Afin de demander à logback-classic de rechercher les modifications dans son fichier de configuration et de se reconfigurer automatiquement, définissez l'attribut d'analyse de l'élément sur true.

<configuration scan="true"> 
  ... 
</configuration> 

Fréquence de balayage: "By default, the configuration file will be scanned for changes once every minute ". Voir le logbackdocumentation de l’API pour plus de détails.

8
Sai prateek

Pour Spring Boot 2.1.5+:

Tout d’abord, vous avez besoin du plugin actionneur:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Deuxièmement, vous devez exposer le point de terminaison, comme l'a dit Dennis dans son commentaire (loggers est désactivé par défaut):

management.endpoints.web.exposure.include=health,info,loggers

Enfin, vous pouvez utiliser les points de terminaison rest pour obtenir des informations sur les enregistreurs et définir les niveaux de journalisation.

curl -X "GET" "http://localhost:8080/actuator/loggers"

Pour définir le niveau de journalisation Root, vous pouvez utiliser

curl -X "POST" "http://localhost:8080/actuator/loggers/ROOT" -H "Content-Type: application/json; charset=utf-8"   -d $'{ "configuredLevel": "INFO" }'
4
Alexander Weiß

Le fournisseur de journalisation par défaut est logback. Pour configurer votre système afin que le niveau de journalisation puisse être modifié au moment de l'exécution, vous devez suivre les étapes suivantes:

Tout d'abord dans src/main/resources créer une configuration de journal personnalisée nommée logback-spring.xml qui inclut le configurateur par défaut de spring, puis ajoute la directive exposant la configuration de la journalisation via JMX:

<configuration>
  <include resource="org/springframework/boot/logging/logback/base.xml"/>
  <jmxConfigurator />    
</configuration>

Ajoutez maintenant une dépendance sur le pont Jolokia JMX-over-HTTP: org.jolokia:jolokia-core.

Vous devriez maintenant pouvoir frapper /jolokia points de terminaison de votre application de démarrage de printemps. Le protocole est documenté ici . Ce n'est pas joli Pour vous aider à démarrer, voici quelques exemples de GET que vous pouvez utiliser directement à partir d'un navigateur:

Afficher le niveau de l'enregistreur ROOT:

/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/getLoggerLevel/ROOT

Changez le niveau du logger ROOT en débogage:

/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/setLoggerLevel/ROOT/debug

l'actionneur de démarrage à ressort est conscient de la /jolokia endpoint et il est marqué sensitive=true donc, si vous avez la sécurité du ressort sur le chemin d'accès aux classes, il nécessitera une authentification.

3
Andy Brown