Protokollieren von HTTP-Anforderungen in Spring Boot mithilfe von Bobbins

Grüße, liebe Freunde!


Heute möchte ich ein hervorragendes Beispiel dafür zeigen, wie Bobina in einer sehr häufigen Situation helfen kann - das Protokollieren von HTTP-Anforderungen und -Antworten in Spring Boot.


Noch mehr! Wir werden HTTP-Nachrichten nur in separaten Dateien protokollieren.


Also lass uns gehen!


Um die HTTP-Protokollierung in Spring Boot zu aktivieren, fügen Sie einfach eine Zeile zu application.properties :


 logging.level.org.springframework.web=TRACE 

Bei einer solchen Konfiguration kann der Hauptteil der HTTP-Anforderung weiterhin nicht protokolliert werden.


Erstellen Sie eine Konfigurationsklasse, um die Protokollierung des Hauptteils der HTTP-Anforderung zu aktivieren:


 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; } } 

Jetzt richten wir Bobbin ein .


Fügen Sie die Abhängigkeit zu build.gradle :


 compile "io.infinite:bobbin:2.0.4" 

Oder in 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> 

Erstellen Sie die Datei Bobbin.json im Ressourcenverzeichnis oder im Arbeitsverzeichnis der Anwendung:


 { "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)" } ] } 

Eines der Hauptmerkmale von "Bobbin" ist, dass es die Protokollausgabe auf einfache Weise in separate Dateien aufteilt, basierend auf Kriterien wie:


  • Nachrichtenebene ( debug , warn usw.)
  • Stream-Name
  • Klassen- und Paketname
  • usw.

Warum sollten wir uns also die Mühe machen, in Dateien, die andere Protokolle enthalten, nach unseren HTTP-Protokollen zu suchen?


Lassen Sie uns die Spring Boot HTTP-Protokolle für unsere Bequemlichkeit auf separate Dateien richten!


Fügen Sie Bobbin.json ein neues 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')" } 

Wie Sie sehen können, schreiben wir Protokolle von Klassen, die org.springframework.web im Namen ihres Pakets enthalten, in das "SPRING_WEB" !


Einfach, oder?


So sieht die vollständige Konfiguration von Bobbin.json aus:


 { "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)" } ] } 

Und hier ist der Inhalt der Protokolldatei selbst .\LOGS\SPRING_WEB\main\http-nio-8089-exec-1\debug\http-nio-8089-exec-1_debug_2019-03-22.log : Link zu github.com, t .k. Datei hat lange Zeilen


Das Protokollieren war noch nie so einfach!


Vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de449008/


All Articles