Registri Tomcat incorporati di Spring Boot

1. Introduzione

Spring Boot viene fornito con un server Tomcat incorporato, che è super pratico. Tuttavia, non possiamo vedere i log di Tomcat per impostazione predefinita.

In questo tutorial impareremo come configurare Spring Boot per mostrare i log interni e di accesso di Tomcat tramite un'applicazione giocattolo.

2. Applicazione di esempio

Prima di tutto, creiamo un'API REST. Definiremo un GreetingsController per salutare l'utente:

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

3. Tipi di registro Tomcat

Tomcat integrato memorizza due tipi di log:

  • Log di accesso
  • Registri interni del server

I log di accesso conservano i record di tutte le richieste elaborate dall'applicazione. Questi registri possono essere utilizzati per tenere traccia di cose come il numero di visite alle pagine e l'attività della sessione utente . Al contrario, i log interni del server ci aiuteranno a risolvere eventuali problemi nella nostra applicazione in esecuzione.

4. Log di accesso

Per impostazione predefinita, i log di accesso non sono abilitati.

Possiamo abilitarli facilmente, tuttavia, aggiungendo una proprietà a application.properties :

server.tomcat.accesslog.enabled=true

Allo stesso modo, possiamo utilizzare gli argomenti della VM per abilitare i log di accesso:

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

Questi file di registro verranno creati in una directory temporanea. Ad esempio, su Windows, la directory per i log di accesso avrà un aspetto simile ad AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ logs

4.1. Formato

Quindi, con questa proprietà abilitata, vedremmo qualcosa di simile nella nostra applicazione in esecuzione:

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

Questi sono i log di accesso e hanno il formato:

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

Che possiamo interpretare come:

% h - l'IP del client che ha inviato la richiesta, 0: 0: 0: 0: 0: 0: 0: 1 in questo caso

% l : l'identità dell'utente

% u - il nome utente determinato dall'autenticazione HTTP

% t : l'ora in cui è stata ricevuta la richiesta

% r - la riga di richiesta dal client, GET / greetings / Harry HTTP / 1.1 in questo caso

%> s - il codice di stato inviato dal server al client, come 200 qui

% b - la dimensione della risposta al client, o 27 per queste richieste

Poiché questa richiesta non aveva un utente autenticato, % l e% u hanno stampato trattini.

Infatti, se manca qualche informazione, Tomcat stamperà un trattino per quello slot .

4.2. Personalizzazione dei registri di accesso

Possiamo sovrascrivere la configurazione predefinita di Spring Boot aggiungendo poche proprietà in application.properties.

Innanzitutto, per modificare il nome del file di registro predefinito:

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

Inoltre, possiamo modificare la posizione dei file di registro:

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

Infine, possiamo sovrascrivere il modo in cui i log vengono scritti nel file di log:

server.tomcat.accesslog.pattern=common

Ci sono anche alcune altre proprietà configurabili in Spring Boot.

5. Registri interni

I log interni del server Tomcat sono molto utili per risolvere eventuali problemi lato server.

Per visualizzare questi registri, dobbiamo aggiungere di seguito la configurazione del registro in application.properties :

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

E poi vedremo qualcosa di simile:

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. Conclusione

In questo rapido articolo, abbiamo appreso la differenza tra i log interni e di accesso di Tomcat. Quindi, abbiamo visto come abilitarli e personalizzarli.

Assicurati di controllare l'esempio su GitHub.