Spring Boot Embedded Tomcat-Protokolle

1. Einleitung

Spring Boot wird mit einem eingebetteten Tomcat-Server geliefert, der sehr praktisch ist. Die Protokolle von Tomcat werden jedoch standardmäßig nicht angezeigt.

In diesem Tutorial erfahren Sie, wie Sie Spring Boot so konfigurieren, dass die internen Protokolle von Tomcat angezeigt werden und über eine Spielzeuganwendung auf Protokolle zugegriffen wird.

2. Beispielanwendung

Lassen Sie uns zunächst eine REST-API erstellen. Wir definieren einen GreetingsController , um den Benutzer zu begrüßen:

@GetMapping("/greetings/{username}") public String getGreetings(@PathVariable("username") String userName) { return "Hello " + userName + ", Good day...!!!"; }

3. Tomcat-Protokolltypen

Embedded Tomcat speichert zwei Arten von Protokollen:

  • Zugriffsprotokolle
  • Interne Serverprotokolle

In den Zugriffsprotokollen werden die Aufzeichnungen aller von der Anwendung verarbeiteten Anforderungen gespeichert. Diese Protokolle können verwendet werden, um Dinge wie die Anzahl der Seitentreffer und die Aktivität von Benutzersitzungen zu verfolgen . Im Gegensatz dazu helfen uns interne Serverprotokolle bei der Behebung von Problemen in unserer laufenden Anwendung.

4. Zugriffsprotokolle

Standardmäßig sind die Zugriffsprotokolle nicht aktiviert.

Wir können sie jedoch leicht aktivieren, indem wir application.properties eine Eigenschaft hinzufügen :

server.tomcat.accesslog.enabled=true

Ebenso können wir VM-Argumente verwenden, um die Zugriffsprotokolle zu aktivieren:

java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar

Diese Protokolldateien werden in einem temporären Verzeichnis erstellt. Unter Windows sieht das Verzeichnis für Zugriffsprotokolle beispielsweise wie folgt aus: AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ logs

4.1. Format

Wenn diese Eigenschaft aktiviert ist, wird in unserer laufenden Anwendung Folgendes angezeigt:

0:0:0:0:0:0:0:1 - - [13/May/2019:23:14:51 +0530] "GET /greetings/Harry HTTP/1.1" 200 27 0:0:0:0:0:0:0:1 - - [13/May/2019:23:17:23 +0530] "GET /greetings/Harry HTTP/1.1" 200 27

Dies sind die Zugriffsprotokolle und sie haben das Format:

%h %l %u %t \"%r\" %>s %b

Was wir interpretieren können als:

% h - die Client-IP, die die Anforderung gesendet hat, in diesem Fall 0: 0: 0: 0: 0: 0: 0: 1

% l - die Identität des Benutzers

% u - der durch die HTTP-Authentifizierung bestimmte Benutzername

% t - die Zeit, zu der die Anfrage eingegangen ist

% r - die Anforderungszeile vom Client, in diesem Fall GET / greetings / Harry HTTP / 1.1

%> s - Der Statuscode, der vom Server an den Client gesendet wird, wie hier 200

% b - die Größe der Antwort an den Client oder 27 für diese Anforderungen

Da diese Anfrage keinen authentifizierten Benutzer hatte, druckten % l und% u Bindestriche.

Wenn Informationen fehlen, druckt Tomcat einen Bindestrich für diesen Steckplatz .

4.2. Anpassen von Zugriffsprotokollen

Wir können die Standard-Spring Boot-Konfiguration überschreiben, indem wir einige Eigenschaften in application.properties hinzufügen .

So ändern Sie zunächst den Standardnamen der Protokolldatei:

server.tomcat.accesslog.suffix=.log server.tomcat.accesslog.prefix=access_log server.tomcat.accesslog.file-date-format=.yyyy-MM-dd

Wir können auch den Speicherort der Protokolldateien ändern:

server.tomcat.basedir=tomcat server.tomcat.accesslog.directory=logs

Schließlich können wir die Art und Weise überschreiben, wie Protokolle in die Protokolldatei geschrieben werden:

server.tomcat.accesslog.pattern=common

Es gibt auch einige weitere konfigurierbare Eigenschaften in Spring Boot.

5. Interne Protokolle

Die internen Protokolle des Tomcat-Servers sind sehr hilfreich, um serverseitige Probleme zu lösen.

Um diese Protokolle anzuzeigen, müssen Sie die folgende Protokollierungskonfiguration in application.properties hinzufügen :

logging.level.org.apache.tomcat=DEBUG logging.level.org.apache.catalina=DEBUG

Und dann sehen wir so etwas wie:

2019-05-17 15:41:07.261 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=1 2019-05-17 15:41:07.262 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=2 2019-05-17 15:41:07.278 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.modeler.Registry : Managed= Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1 ... 2019-05-17 15:41:07.279 DEBUG 31160 --- [io-40124-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null ... 2019-05-17 15:41:07.280 DEBUG 31160 --- [io-40124-exec-1] o.a.tomcat.util.modeler.BaseModelMBean : preRegister [email protected] Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1 2019-05-17 15:41:07.292 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.http.Parameters : Set query string encoding to UTF-8 2019-05-17 15:41:07.294 DEBUG 31160 --- [io-40124-exec-1] o.a.t.util.http.Rfc6265CookieProcessor : Cookies: Parsing b[]: jenkins-timestamper-offset=-19800000 2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request GET /greetings/Harry 2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined

6. Fazit

In diesem kurzen Artikel haben wir den Unterschied zwischen den internen Protokollen und den Zugriffsprotokollen von Tomcat kennengelernt. Dann haben wir gesehen, wie man sie aktiviert und anpasst.

Schauen Sie sich das Beispiel auf GitHub an.