Configura Spring Boot para Mostrar Registros de Tomcat

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.