Spring Boot – Registro

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:

  1. Fecha de registro
  2. Tiempo con precisión de milisegundos
  3. El nivel de registro muestra INFO, WARN y ERROR de forma predeterminada
  4. Identificacion de proceso
  5. – actúa como un separador
  6. Nombre del hilo entre corchetes
  7. Nombre del registrador que muestra el nombre de la clase de origen
  8. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *