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.