Logs Tomcat incorporados com inicialização por mola
1. Introdução
O Spring Boot vem com um servidor Tomcat incorporado, o que é super útil. No entanto, não podemos ver os logs do Tomcat por padrão.
Neste tutorial, aprenderemos como configurar o Spring Boot para mostrar os logs internos e de acesso do Tomcat através de um aplicativo de brinquedo.
2. Aplicação de amostra
Primeiro de tudo, vamos criar uma API REST. Vamos definir um GreetingsController para cumprimentar o usuário:
@GetMapping("/greetings/{username}")
public String getGreetings(@PathVariable("username") String userName) {
return "Hello " + userName + ", Good day...!!!";
}
3. Tipos de log do Tomcat
O Tomcat incorporado armazena dois tipos de logs:
-
Logs de acesso
-
Logs internos do servidor
Os access logs mantêm os registros de todas as solicitações processadas pelo aplicativo. Esses logs podem ser usados para rastrear coisas como contagem de ocorrências de páginas e atividade da sessão do usuário. Por outro lado, internal server logs nos ajudará a solucionar quaisquer problemas em nosso aplicativo em execução.
4. Logs de acesso
Por padrão, os logs de acesso não estão habilitados.
No entanto, podemos ativá-los facilmente, adicionando uma propriedade a application.properties:
server.tomcat.accesslog.enabled=true
Da mesma forma, podemos usar argumentos da VM para ativar os logs de acesso:
java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar
*Esses arquivos de log serão criados em um diretório temporário.* Por exemplo, no Windows, o diretório para logs de acesso será semelhante a _AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ logs_
4.1. Formato
Portanto, com essa propriedade ativada, veríamos algo como o seguinte em nosso aplicativo em execução:
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
Estes são os logs de acesso e têm o formato:
%h %l %u %t \"%r\" %>s %b
Que podemos interpretar como:
% h - o IP do cliente que enviou a solicitação, 0: 0: 0: 0: 0: 0: 0: 1 neste caso + % l - a identidade do usuário + % u - o nome do usuário determinado por autenticação HTTP + % t - o horário em que a solicitação foi recebida + % r - a linha de solicitação do cliente, GET/greetings/Harry HTTP/1.1 neste caso + %> s - o código de status enviado pelo servidor para o cliente, como 200 aqui + % b - o tamanho da resposta ao cliente ou 27 para essas solicitações
Como essa solicitação não tinha um usuário autenticado, % le% u imprimiram traços.
De fato, se alguma informação estiver faltando, o Tomcat imprimirá um traço para esse slot .
4.2. Personalizando logs de acesso
Podemos substituir a configuração padrão do Spring Boot adicionando poucas propriedades em _application.properties. _
Primeiramente, para alterar o nome do arquivo de log padrão:
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
Além disso, podemos alterar a localização dos arquivos de log:
server.tomcat.basedir=tomcat
server.tomcat.accesslog.directory=logs
Por fim, podemos substituir a maneira como os logs são gravados no arquivo de log:
server.tomcat.accesslog.pattern=common
Existem também mais algumas configurable properties no Spring Boot.
5. Logs internos
Os logs internos do servidor Tomcat são muito úteis para resolver problemas do servidor.
Para visualizar esses logs, precisamos adicionar abaixo a configuração de log em application.properties:
logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG
E então veremos algo como:
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. Conclusão
Neste artigo rápido, aprendemos a diferença entre os logs internos e de acesso do Tomcat. Em seguida, vimos como habilitá-los e personalizá-los.
Verifique o exemplo over no GitHub.