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?
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.
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 .
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>
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 ...
}
}
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
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
Depuis Spring Boot 1.5.x, vous pouvez utiliser le noeud final du consignateur pour POST niveau de consignation souhaité .
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 logback
documentation de l’API pour plus de détails.
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" }'
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.