Salutations, chers amis!
Aujourd'hui, je veux montrer un excellent exemple de la façon dont Bobina peut aider dans une situation très courante - la journalisation des demandes et des réponses HTTP dans Spring Boot.
Encore plus! Nous enregistrerons uniquement les messages HTTP dans des fichiers séparés.
Alors allons-y!
Pour activer la journalisation HTTP dans Spring Boot, ajoutez simplement une ligne à application.properties
:
logging.level.org.springframework.web=TRACE
Une telle configuration ne permettra toujours pas au corps de la requête HTTP d'être enregistré.
Pour activer la journalisation du corps de la requête HTTP, créez une classe de configuration:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.CommonsRequestLoggingFilter; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public CommonsRequestLoggingFilter logFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeQueryString(true); filter.setIncludePayload(true); filter.setMaxPayloadLength(100000); filter.setIncludeHeaders(false); filter.setAfterMessagePrefix("REQUEST DATA : "); return filter; } }
Maintenant, configurons Bobbin .
Ajoutez la dépendance à build.gradle
:
compile "io.infinite:bobbin:2.0.4"
Ou dans pom.xml
:
<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.5.6</version> <type>pom</type> </dependency> <dependency> <groupId>io.infinite</groupId> <artifactId>bobbin</artifactId> <version>2.0.4</version> </dependency>
Créez le fichier Bobbin.json
dans le répertoire des ressources ou dans le répertoire de travail de l'application:
{ "levels": "['debug', 'info', 'warn', 'error'].contains(level)", "destinations": [ { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/THREADS/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('io.infinite.')" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/ALL/WARNINGS_AND_ERRORS_${date}.log\"" }, "levels": "['warn', 'error'].contains(level)" }, { "name": "io.infinite.bobbin.destinations.ConsoleDestination", "levels": "['warn', 'error'].contains(level)" } ] }
L'une des principales caractéristiques de "Bobbin" est qu'il divise facilement la sortie de journalisation en fichiers séparés en fonction de critères tels que:
- Niveau de message (
debug
, warn
, etc.) - Nom du flux
- Nom de classe et de package
- etc.
Alors, pourquoi devrions-nous prendre la peine de chercher nos journaux HTTP dans des fichiers contenant d'autres journaux?
Dirigeons les journaux HTTP Spring Boot vers des fichiers séparés pour notre commodité!
Ajoutez une nouvelle destination
à Bobbin.json
:
{ "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/SPRING_WEB/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('org.springframework.web')" }
Comme vous pouvez le voir, nous écrivons des journaux de classes contenant org.springframework.web
au nom de leur package dans le "SPRING_WEB"
!
Facile, non?
Voici à quoi ressemble la configuration complète de Bobbin.json
:
{ "levels": "['debug', 'info', 'warn', 'error'].contains(level)", "destinations": [ { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/THREADS/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('io.infinite.')" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/ALL/WARNINGS_AND_ERRORS_${date}.log\"" }, "levels": "['warn', 'error'].contains(level)" }, { "name": "io.infinite.bobbin.destinations.FileDestination", "properties": { "fileName": "\"./LOGS/SPRING_WEB/${threadGroupName}/${threadName}/${level}/${threadName}_${level}_${date}.log\"" }, "classes": "className.contains('org.springframework.web')" }, { "name": "io.infinite.bobbin.destinations.ConsoleDestination", "levels": "['warn', 'error'].contains(level)" } ] }
Et voici le contenu du fichier journal lui-même .\LOGS\SPRING_WEB\main\http-nio-8089-exec-1\debug\http-nio-8089-exec-1_debug_2019-03-22.log
: lien vers github.com, t .k. le fichier a de longues lignes
La journalisation n'a jamais été aussi facile!
Merci de votre attention!