Cómo configurar Spring Boot para mostrar los registros de Tomcat
1. Introducción
Spring Boot viene con un servidor Tomcat embebido, lo cual es muy conveniente. Sin embargo, por defecto, no podemos ver los registros de Tomcat. En este artículo, aprenderemos cómo configurar Spring Boot para mostrar los registros internos y de acceso de Tomcat a través de una aplicación de ejemplo.
2. Aplicación de Ejemplo
Primero que todo, vamos a crear una API REST. Definiremos un GreetingController
para saludar al usuario:
@GetMapping("/greetings/{username}")
public String getGreetings(@PathVariable("username") String userName) {
return "Hello " + userName + ", Good day...!!!";
}
En este ejemplo, la API responde con un saludo personalizado basado en el nombre de usuario proporcionado en la URL.
3. Tipos de Registros de Tomcat
El Tomcat embebido almacena dos tipos de registros:
- Registros de acceso
- Registros internos del servidor
Los registros de acceso mantienen registros de todas las solicitudes procesadas por la aplicación. Estos registros pueden ser utilizados para rastrear cosas como conteos de visitas de página y la actividad de sesiones de usuario. En contraste, los registros internos del servidor nos ayudarán a solucionar cualquier problema en nuestra aplicación en ejecución.
4. Registros de Acceso
Por defecto, los registros de acceso no están habilitados. Sin embargo, podemos habilitarlos fácilmente añadiendo una propiedad en application.properties
:
server.tomcat.accesslog.enabled=true
De manera similar, también podemos usar argumentos de VM para habilitar los registros de acceso:
java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar
Estos archivos de registro se crearán en un directorio temporal. Por ejemplo, en Windows, el directorio para los registros de acceso podría parecer algo como AppData\Local\Temp\tomcat.2142886552084850151.40123\logs
.
4.1. Formato
Con esta propiedad habilitada, podemos ver algo como lo siguiente en nuestra aplicación en ejecución:
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
Estos son los registros de acceso, y tienen el siguiente formato:
%h %l %u %t \"%r\" %>s %b
Podemos interpretar esto de la siguiente manera:
- %h: la IP del cliente que ha enviado la solicitud (en este caso,
0:0:0:0:0:0:0:1
) - %l: la identidad del usuario
- %u: el nombre de usuario determinado por la autenticación HTTP
- %t: el momento en que se recibió la solicitud
- %r: la línea de solicitud del cliente (en este caso,
GET /greetings/Harry HTTP/1.1
) - %>s: el código de estado enviado desde el servidor al cliente (como
200
aquí) - %b: el tamaño de la respuesta al cliente (o
27
para estas solicitudes)
Dado que esta solicitud no tuvo un usuario autenticado, tanto %l como %u imprimirán guiones (-
). De hecho, si cualquier información falta, Tomcat imprimirá un guion para ese espacio.
4.2. Personalización de los Registros de Acceso
Podemos sobrescribir la configuración predeterminada de Spring Boot añadiendo algunas propiedades en application.properties
.
Primero, para cambiar el nombre del archivo de registro predeterminado:
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
También podemos cambiar la ubicación de los archivos de registro:
server.tomcat.basedir=tomcat
server.tomcat.accesslog.directory=logs
Finalmente, podemos sobrescribir la forma en que se escriben los registros en el archivo de registro:
server.tomcat.accesslog.pattern=common
Hay algunas más propiedades configurables en Spring Boot, también.
5. Registros Internos
Los registros internos del servidor Tomcat son muy útiles para solucionar problemas en el lado del servidor. Para visualizar estos registros, debemos agregar la siguiente configuración de registro en application.properties
:
logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG
Una vez hecho esto, 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
...
Estos registros internos proporcionan información detallada que puede ayudarnos a diagnosticar problemas en tiempo real.
6. Conclusión
En este breve artículo, hemos aprendido la diferencia entre los registros internos y de acceso de Tomcat. Luego, vimos cómo habilitarlos y personalizarlos para que se ajusten a nuestras necesidades.
La configuración adecuada de los registros puede ser de gran ayuda en el desarrollo y mantenimiento de aplicaciones Java, permitiendo un mejor seguimiento del comportamiento de la aplicación y facilitando la resolución de problemas.
Consejos prácticos:
- Revisar los registros regularmente: Haz un hábito de revisar tanto los registros de acceso como los internos para detectar cualquier comportamiento inusual en tus aplicaciones.
- Personaliza los formatos de registro: Configura los formatos de registro de acuerdo a tus necesidades, esto puede facilitar la interpretación y análisis posterior.
- Entiende los niveles de logging: Familiarízate con los niveles de logging (INFO, DEBUG, ERROR) para que puedas optimizar la salida de información que realmente necesitas en un momento específico.
Siguiendo estas recomendaciones, podrás convertirte en un programador aún más eficaz en el ecosistema de Spring Boot y Java.