Saudações, queridos amigos!
Hoje, quero demonstrar um excelente exemplo de como Bobina pode ajudar em uma situação muito comum - registrando solicitações e respostas HTTP no Spring Boot.
Ainda mais! Somente registraremos mensagens HTTP em arquivos separados.
Então vamos lá!
Para ativar o log HTTP no Spring Boot, basta adicionar uma linha ao application.properties
:
logging.level.org.springframework.web=TRACE
Essa configuração ainda não permitirá que o corpo da solicitação HTTP seja registrado.
Para ativar o log do corpo da solicitação HTTP, crie uma classe de configuração:
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; } }
Agora, vamos configurar o Bobbin .
Adicione a dependência ao build.gradle
:
compile "io.infinite:bobbin:2.0.4"
Ou no 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>
Crie o arquivo Bobbin.json
no diretório de recursos ou no diretório de trabalho do aplicativo:
{ "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)" } ] }
Uma das principais características do "Bobbin" é que ele divide facilmente a saída do log em arquivos separados, com base em critérios como:
- Nível da mensagem (
debug
, warn
etc.) - Nome do stream
- Nome da classe e do pacote
- etc.
Então, por que devemos procurar nossos logs HTTP em arquivos que contenham outros logs?
Vamos direcionar os logs HTTP do Spring Boot para separar arquivos para nossa conveniência!
Adicione um novo destination
ao 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')" }
Como você pode ver, escrevemos logs de classes contendo org.springframework.web
no nome de seu pacote no diretório "SPRING_WEB"
!
Fácil né?
É assim que a configuração completa do Bobbin.json
parece:
{ "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)" } ] }
E aqui está o conteúdo do próprio arquivo de log .\LOGS\SPRING_WEB\main\http-nio-8089-exec-1\debug\http-nio-8089-exec-1_debug_2019-03-22.log
: Link para github.com, t .k. arquivo tem longas filas
O registro nunca foi tão fácil!
Obrigado pela atenção!