Una buena infraestructura de registro es necesaria para cualquier proyecto de software, ya que no solo ayuda a comprender lo que sucede con la aplicación, sino también a rastrear cualquier incidente inusual o error presente en el proyecto. Este artículo cubre varias formas en las que se puede habilitar el registro en un proyecto de arranque de primavera a través de configuraciones fáciles y simples. Primero hagamos la configuración inicial para explorar cada opción con más profundidad.
Configuración inicial
Para crear un proyecto Spring Boot simple usando Spring Initializer, consulte este artículo . Definamos un controlador de descanso simple que genera varios niveles de mensajes de registro.
Java
// Rest Controller to print various log level messages package com.log.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LogController { // creating a logger Logger logger = LoggerFactory.getLogger(LogController.class); @RequestMapping("/log") public String log() { // Logging various log level messages logger.trace("Log level: TRACE"); logger.info("Log level: INFO"); logger.debug("Log level: DEBUG"); logger.error("Log level: ERROR"); logger.warn("Log level: WARN"); return "Hey! You can check the output in the logs"; } }
Ahora simplemente necesitamos ejecutar la aplicación y presionar http://localhost:8080/log para ver los mensajes de registro.
Registro predeterminado sin configuraciones
Spring boot nos permite ver los logs en la consola aunque no proporcionemos ninguna configuración específica para ello. Esto se debe a que Spring Boot usa Logback para su registro predeterminado. El proveedor de registro interno de Spring Boot es A pache Commons , que brinda soporte para Java Util Logging , Log4j2 y Logback . Por lo tanto, Apache Commons tuvo que importarse manualmente hasta Spring Boot 1.x. Sin embargo, desde Spring Boot 2.x, se descarga de forma transitiva. Para ser más específicos, los iniciadores Spring Boot, como Spring-Boot-Starter-Web, importan Spring-Boot-Starter-Logging, que extrae automáticamente Logback. Al ejecutar la aplicación y visitar elhttp://localhost:8080/ página de registro, podemos ver el siguiente resultado en la consola:
El formato de registro y los colores ANSI están configurados por Spring Boot de antemano para que el registro sea más legible. Los siguientes componentes están presentes en la salida del registro:
- Fecha de registro
- Tiempo con precisión de milisegundos
- El nivel de registro muestra INFO, WARN y ERROR de forma predeterminada
- Identificacion de proceso
- – actúa como un separador
- Nombre del hilo entre corchetes
- Nombre del registrador que muestra el nombre de la clase de origen
- El mensaje de registro
Salida de consola
Los niveles de registro admitidos por Spring boot son TRACE , INFO , DEBUG , ERROR y WARN . Por defecto, ERROR, INFO y WARN se imprimen en la consola. Es posible activar el nivel de depuración y rastreo iniciando la aplicación con el indicador de depuración o el indicador de seguimiento de la siguiente manera:
java -jar target/log-0.0.1-SNAPSHOT.jar –debug
java -jar target/log-0.0.1-SNAPSHOT.jar –trace
Alternativamente, esto también se puede hacer agregando las siguientes propiedades en el archivo application.properties .
depuración = verdadero
rastro = verdadero
Salida codificada por colores
Si su terminal admite ANSI, la salida del registro codificada por colores se puede ver en la consola. La siguiente propiedad se puede configurar en el archivo application.properties para obtener la salida codificada por colores:
spring.output.ansi.enabled=siempre
Iniciar sesión en un archivo
Spring boot solo inicia sesión en la consola de forma predeterminada. Para iniciar sesión en un archivo, se deben agregar las siguientes propiedades al archivo application.properties :
logging.file.path=registros/
logging.file.name=logs/application.log
Después de agregar estas propiedades, si ejecutamos la aplicación Spring Boot y visitamos la página http://localhost:8080/log , podemos ver los registros en la consola y en el archivo de registro. Se crea una nueva carpeta con el nombre logs en la ruta actual y dentro de esta carpeta se encuentra el archivo de registro denominado application.log. El contenido del archivo de registro es el siguiente:
Inicio de sesión con configuración Logback
Spring boot permite configurar el inicio de sesión de una manera específica para cumplir con los requisitos de nuestro proyecto. Para hacerlo, debemos definir un archivo de configuración en el que podamos especificar el patrón de registro, el color, diferentes propiedades para el registro de archivos y el registro de la consola, y una política continua eficiente para evitar la creación de archivos de registro de gran tamaño. Cada vez que Spring boot encuentra un archivo con cualquiera de los siguientes nombres, anula automáticamente la configuración predeterminada.
- logback-primavera.groovy
- logback.groovy
- logback-primavera.xml
- inicio de sesión.xml
Ahora vamos a crear un archivo logback-spring.xml simple
XML
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- Setting up log path and log file name --> <property name="LOG_PATH" value="./logs" /> <property name="LOG_FILE_NAME" value="application_logback" /> <!-- Setting up logging pattern for console logging --> <appender name="ConsoleOutput" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %white(%d{ISO8601}) %highlight(%-5level) [%yellow(%t)] : %msg%n%throwable </Pattern> </layout> </appender> <!-- Setting the filename and logging pattern for log file --> <appender name="LogFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${LOG_FILE_NAME}.log</file> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n </Pattern> </encoder> <!-- Setting up a rolling policy with rolling done daily and when file size is 10MB--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/archived/${LOG_FILE_NAME}-%d{yyyy-MM-dd}.%i.log </fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> </appender> <!-- Logging at INFO level --> <root level="info"> <appender-ref ref="LogFile" /> <appender-ref ref="ConsoleOutput" /> </root> <!-- Logging at TRACE level --> <logger name="com.log" level="trace" additivity="false"> <appender-ref ref="LogFile" /> <appender-ref ref="ConsoleOutput" /> </logger> </configuration>
Al ejecutar la aplicación y visitar la página http://localhost:8080/log, recibimos el siguiente resultado de la consola:
La salida de la consola es según el patrón de registro y el color definido en el archivo logback-spring.xml . Se crea un nuevo archivo de registro con el nombre application-logback.log en la carpeta/logs presente en la ruta actual que se archiva a través de una política continua. La salida del archivo de registro es la siguiente:
Iniciar sesión con la configuración de Log4j2
Para usar log4j2, debemos excluir Logback de nuestra dependencia inicial y agregar la dependencia para log4j2 de la siguiente manera:
XML
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
A continuación, debemos definir el archivo de configuración para Log4j2. Cuando Spring Boot encuentra un archivo con cualquiera de los siguientes nombres, lo anula automáticamente sobre la configuración predeterminada.
- log4j2-primavera.xml
- log4j2.xml
Ahora vamos a crear un archivo simple log4j2-spring.xml de la siguiente manera:
XML
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <!-- Setting up log path and log file name --> <Properties> <property name="LOG_PATH" value="./logs" /> <property name="LOG_FILE_NAME" value="application-log4j2" /> </Properties> <!-- Setting up logging pattern for console logging --> <Appenders> <Console name="ConsoleOutput" target="SYSTEM_OUT"> <PatternLayout pattern="%style{%d{ISO8601}}{white} %highlight{%-5level} [%style{%t}{bright,yellow}] : %msg%n%throwable" disableAnsi="false" /> </Console> <!-- Setting the filename and logging pattern for log file. Also setting up a rolling policy with rolling done daily and when file size is 10MB --> <RollingFile name="LogFile" fileName="${LOG_PATH}/${LOG_FILE_NAME}.log" filePattern="${LOG_PATH}/$${date:yyyy-MM}/application-log4j2-%d{dd-MMMM-yyyy}-%i.log.gz"> <PatternLayout> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n </pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> <TimeBasedTriggeringPolicy /> </Policies> </RollingFile> </Appenders> <Loggers> <!-- Logging at INFO level --> <Root level="info"> <AppenderRef ref="ConsoleOutput" /> <AppenderRef ref="LogFile" /> </Root> <!-- Logging at TRACE level --> <logger name="com.log" level="trace" additivity="false"> <appender-ref ref="LogFile" /> <appender-ref ref="ConsoleOutput" /> </logger> </Loggers> </Configuration>
Al ejecutar la aplicación y visitar la página http://localhost:8080/log , recibimos el siguiente resultado de la consola:
La salida de la consola es según el patrón de registro y el color definido en el archivo logback-Log4j2.xml . Se crea un nuevo archivo de registro con el nombre application-Log4j2.log en la carpeta/logs presente en la ruta actual que se archiva a través de una política continua. La salida del archivo de registro es la siguiente:
Publicación traducida automáticamente
Artículo escrito por akankshapatro y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA