Registro

Módulo 5. Spring
Nivel 15 , Lección 8
Disponible

Usos de Spring Boot Commons Logging para un registro integral interno, pero deja abierta la implementación de registro subyacente. Se proporcionan configuraciones predeterminadas para Java Util Logging, Log4J2 y Volver a iniciar sesión. En cada caso, los administradores de registro están preconfigurados para usar la salida de la consola con la opción de enviarla a un archivo.

De forma predeterminada, si se usan Starters, se usa Logback para el registro. También se proporciona un enrutamiento de inicio de sesión adecuado para garantizar el funcionamiento correcto de las bibliotecas dependientes que utilizan Java Util Logging, Commons Logging, Log4J o SLF4J.

Hay muchos registros Marcos disponibles para Java. No se preocupe si la lista anterior es confusa. Normalmente no hay necesidad de cambiar las dependencias de registro y la configuración predeterminada de Spring Boot funciona bien.
Si está implementando su aplicación en un contenedor de servlets o en una aplicación de servidor, el registro realizado mediante la API de registro de Java Util no se enruta a los registros de la aplicación. Esto evita que los registros de la aplicación registren entradas ejecutadas por el contenedor u otras aplicaciones que se hayan implementado en él.

Formato del registrador

La salida del registro predeterminada en Spring Boot es similar a la siguiente ejemplo:

2022-10-20 12:40:11.311  INFO 16138 --- [           main] o.s.b.d.f.s.MyApplication                : Iniciando MyApplication usando Java 1.8.0_345 en myhost con PID 16138 16138 (/opt/apps/myapp.jar iniciado por myuser en /opt/apps/)
2022-10-20 12:40:11.330  INFO 16138 --- [           main] o.s.b.d.f.s.MyApplication                : no hay perfil activo establecido, volviendo a 1 perfil predeterminado: "predeterminado"
2022-10-20 12:40:13.056  INFO 16138 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat inicializado con puerto(s): 8080 (http)
2022-10-20 12:40:13.070  INFO 16138 --- [           main] o.apache.catalina.core.StandardService   : Iniciando servicio [Tomcat]
2022-10-20 12:40:13.070  INFO 16138 --- [           main] org.apache.catalina.core.StandardEngine  : Iniciando el motor Servlet: [Apache Tomcat/9.0.68]
2022-10-20 12:40:13.178  INFO 16138 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Inicializando WebApplicationContext incorporado de Sprin
2022-10-20 12:40:13.178  INFO 16138 --- [           main] w.s.c.ServletWebServerApplicationContext : WebApplicationContext raíz: inicialización completada en 1762 ms
2022-10-20 12:40:13.840  INFO 16138 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat se inició en los puertos: 8080 (http) con ruta de contexto ''
2022-10-20 12:40:13.850  INFO 16138 --- [           main] o.s.b.d.f.s.MyApplication                : Started

Se generan los siguientes elementos:

  • Fecha y hora: precisión de milisegundos y clasificación sencilla.

  • Nivel de registro: ERROR, WARN, INFO, DEBUG o TRACE.

  • ID de proceso.

  • Separador --- para separar el comienzo de los mensajes de registro reales.

  • Nombre de transmisión: adjunto entre corchetes (se puede truncar para la salida de la consola).

  • Nombre del administrador de registros: normalmente el nombre de la clase original (a menudo abreviado).

  • Mensaje de registro.

El inicio de sesión no tiene un FATAL nivel. Se muestra como ERROR.

Salida de la consola

En la configuración de registro predeterminada, los mensajes se reflejan en la consola a medida que se escriben. De forma predeterminada, los mensajes en los niveles ERROR, WARN e INFO se escriben en el registro. También puede habilitar el modo "depuración" ejecutando la aplicación con el indicador --debug.

$ java -jar myapp.jar --debug
También puede establecer debug=true en el archivo application.properties.

Si el modo de depuración está habilitado, se configura un conjunto de administradores de registro principales (contenedor integrado, Hibernate y Spring Boot) para generar información adicional. Habilitar el modo de depuración configura la aplicación para registrar todos los mensajes en el nivel DEBUG.

También puede habilitar el modo "rastreo" ejecutando la aplicación con el de marca --trace (o trace=true en el archivo application.properties). Esto le permite registrar registros de seguimiento para varios de los principales administradores de registros (el contenedor integrado, la generación de esquemas de Hibernate y todo el portafolio de Spring).

Salida resaltada en color

Si el terminal admite ANSI, esto se utiliza para facilitar la lectura de la salida en color. Puede instalar spring.output.ansi.enabled en valor admitido para anular la detección automática.

La codificación de color se configura utilizando la palabra de conversión %clr . En su forma más simple, el convertidor colorea la salida según el nivel de registro, como se muestra en el siguiente ejemplo:

%clr(%5p)

La siguiente tabla describe la correspondencia entre los niveles de registro y los colores:

Nivel Color

FATAL

Rojo

ERROR

Rojo

ADVERTENCIA

Amarillo

INFO

Verde

DEBUG

Verde

TRACE

Verde

También puede especificar el color o estilo que deseas utilizar, especificándolo como parámetro para la conversión. Por ejemplo, para hacer que el texto sea amarillo, use la siguiente configuración:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){amarillo}

Los siguientes colores y estilos son compatibles:

  • azul

  • cian

  • débil

  • verde

  • magenta

  • rojo

  • amarillo

Salida a un archivo

De forma predeterminada, Spring Boot registra solo en la consola y no escribe en archivos de registro. Si necesita escribir en archivos de registro además de enviarlos a la consola, debe configurar la propiedad logging.file.name o logging.file.path (por ejemplo, en el archivo application.properties).

La siguiente tabla muestra cómo las propiedades logging.* se pueden usar juntas:5

Tabla 5 Propiedades de registro
logging.file.name logging.file.path Ejemplo Descripción

(ausente)

(ausente)

Muestra entradas de registro exclusivamente en la consola.

Archivo específico

(ausente)

my.log

Escribe en el archivo especificado archivo de registro. Los nombres pueden ser una ubicación exacta o estar asociados con el directorio actual.

(faltante)

Directorio específico

/var/log

Escribe spring.log en el directorio especificado. Los nombres pueden ser una ubicación exacta o estar asociados con el directorio actual.

Los archivos de registro se rotan si alcanzan los 10 MB de tamaño y, como en el caso de la salida de la consola, los mensajes en los niveles ERROR, WARN e INFO se registran de forma predeterminada.

Las propiedades de registro son independientes de la infraestructura de registro real. Por lo tanto, Spring Boot no controla claves de configuración específicas (por ejemplo, logback.configurationFile para Logback).

Rotación de archivos

Si está utilizando Logback, puede ajustar los parámetros de rotación de registros utilizando el archivo application.properties o application.yaml. Para todos los demás sistemas de registro, deberá configurar los parámetros de rotación usted mismo (por ejemplo, si está utilizando Log4J2, puede agregar el archivo log4j2.xml o log4j2-spring.xml).

Se admiten las siguientes propiedades de política de rotación:

Nombre Descripción

logging.logback.rollingpolicy.file-name-pattern

Patrón de nombre de archivo utilizado para crear archivos de registro.

logging.logback.rollingpolicy.clean-history-on-start

Si el archivo de registro debe limpiarse cuando se inicia la aplicación.

logging.logback.rollingpolicy.max-file-size

El tamaño máximo de un archivo de registro antes de archivarlo.

registro. logback.rollingpolicy.total-size-cap

Tamaño máximo del archivo de registro que se eliminará antes de la eliminación real.

logging.logback.rollingpolicy.max-history

Número máximo de archivos en el archivo de registro que deben almacenarse (predeterminado 7).

Niveles de registro

Todos los sistemas de registro compatibles pueden tener niveles de registro establecidos a Environment desde Spring (por ejemplo, application.properties) usando logging.level.<logger-name>=<level>, donde level es uno de los niveles, incluido TRACE, DEBUG, INFO, WARN, ERROR, FATAL u OFF. Puede configurar el administrador de registro root usando logging.level.root.

El siguiente ejemplo muestra posibles opciones de registro en application.properties:

Propiedades

logging.level.root=warn
logging.level.org.springframework.web=debug
logging .level.org.hibernate=error
Yaml
logging:
    level:
        root: "warn"
        org.springframework.web: "debug"
        org.hibernate: "error"

También puede establecer niveles de registro utilizando variables de entorno. Por ejemplo, LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG establecerá org.springframework.web en DEBUG.

El enfoque anterior solo funcionará para el registro a nivel de paquete. Debido a que el enlace flexible siempre convierte las variables de entorno a minúsculas, no es posible configurar el registro para una sola clase de esta manera. Si desea configurar el registro para una clase, puede utilizar la variable SPRING_APPLICATION_JSON.

Grupos de registro

En muchos casos, es útil poder para agrupar administradores de registro relacionados para que puedan configurarse simultáneamente. Por ejemplo, puede cambiar con frecuencia los niveles de registro para todos los administradores de registro asociados con Tomcat, pero no podrá recordar fácilmente los paquetes de nivel superior.

Para ayudar Con esto, Spring Boot le permite definir grupos que inician sesión en su Environment para Spring. Por ejemplo, así es como puede definir un "grupo Tomcat" agregándolo a su archivo application.properties:

Propiedades
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
Yaml
registro: grupo: tomcat:
        "org.apache.catalina,org.apache.coyote,org.apache.tomcat"
    

Una vez definido, puede cambiar el nivel de todos los administradores de registro en un grupo con una línea:

Propiedades
logging.level.tomcat=trace
Yaml
logging: nivel: tomcat: "trace"

Spring Boot contiene los siguientes grupos de registro predefinidos que se pueden usado de fábrica:

Nombre Administradores de registros

web

org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans

sql

org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener

Uso de un interceptor de cierre de registros

Para liberar recursos de registro cuando La aplicación se cierra, hay un interceptor de apagado que se ejecuta y borra el sistema de registro al salir de la JVM. Este enlace de finalización se registra automáticamente a menos que su aplicación se implemente como un archivo war. Si su aplicación tiene una jerarquía compleja de contextos, es posible que un interceptor de finalización no satisfaga sus necesidades. Si no coincide, desactive el interceptor de finalización y considere las opciones proporcionadas directamente por el sistema de registro subyacente. Por ejemplo, Logback proporciona selectores de contexto que permiten crear cada registrador en su propio contexto. Puede utilizar la propiedad logging.register-shutdown-hook para desactivar el enlace de apagado. Establecer el valor en false deshabilita el registro. Puede establecer esta propiedad en el archivo application.properties o application.yaml:

Propiedades
logging.register-shutdown-hook=false
Yaml
logging: Register-shutdown-hook: false

Configuración de registro personalizada

Varios sistemas de registro pueden se activa habilitando bibliotecas relevantes en el classpath y se configura específicamente pasando el archivo de configuración apropiado en la raíz del classpath o en la ubicación especificada por la siguiente propiedad Environment para Spring: logging.config.

Puede forzar a Spring Boot a utilizar un sistema de registro específico utilizando la propiedad del sistema org.springframework.boot.logging.LoggingSystem. El valor debe ser el nombre completo de la clase de implementación LoggingSystem. También puede deshabilitar completamente la configuración de registro de Spring Boot usando el valor none.

Debido a que el registro se inicializa antes de crear el ApplicationContext, no es posible controlar el registro a través de la anotación @PropertySources en archivos Spring con la anotación @Configuration. La única forma de cambiar el sistema de registro o desactivarlo por completo es a través de las propiedades del sistema.

Dependiendo del sistema de registro, se cargan los siguientes archivos:

Sistema de registro Configuración

Logback

logback-spring.xml, logback-spring.groovy, logback.xml o logback.groovy

Log4j2

log4j2-spring.xml o log4j2.xml

JDK (Java Util Logging)

logging.properties

Si es posible, recomendamos utilizar las opciones -spring para la configuración de registro (por ejemplo, logback-spring.xml , no logback.xml). Si se utilizan ubicaciones de configuración estándar, Spring no podrá controlar completamente la inicialización del registro.
Existen peculiaridades conocidas con la carga de clases en Java Util Logging que causar problemas de inicio desde el "archivo jar ejecutable". Recomendamos evitar esto si es posible cuando se ejecuta desde un "jar ejecutable".

Para simplificar la configuración, algunas otras propiedades se mueven desde Environment para Spring a las propiedades del sistema, como se describe en el siguiente tabla:

Entorno Spring Propiedad del sistema Comentarios

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

La palabra de conversión utilizada al registrar excepciones.

logging.file.name

LOG_FILE

Si se define, se utiliza en la configuración de registro predeterminada.

logging.file.path

LOG_PATH

Si está definido, se utiliza en la configuración de registro predeterminada.

registro .pattern.console

CONSOLE_LOG_PATTERN

Patrón de registro para usar con el consola (STDOUT).

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

Patrón de anexo para formatear la fecha del registro.

logging.charset.console

CONSOLE_LOG_CHARSET

Codificación utilizada para registrar el registro con la salida de la consola.

logging.pattern.file

FILE_LOG_PATTERN

Patrón de registro a utilizar en el archivo (si la propiedad LOG_FILE está activada ).

logging.charset.file

FILE_LOG_CHARSET

Codificación utilizada para registrar archivos (si la propiedad LOG_FILE está activada).

logging.pattern.level

LOG_LEVEL_PATTERN

Formato utilizado al visualizar el nivel de registro (predeterminado %5p).

PID

PID

Identificador de la corriente proceso (reconocido si es posible y si aún no está definido como una variable de entorno del sistema operativo).

Si usa Logback, las siguientes propiedades también se pasan:

Entorno Spring Propiedad del sistema Comentarios

logging.logback.rollingpolicy.file-name-pattern

LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN

Plantilla para los nombres de los archivos de registro archivados (por defecto ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz).

logging.logback.rollingpolicy.clean-history-on-start

LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START

Indica si los archivos del archivo de registro deben borrarse al inicio.

logging.logback.rollingpolicy.max-file-size

LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE

Tamaño máximo del archivo de registro.

logging.logback.rollingpolicy.total- size-cap

LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP

Tamaño total de las copias de seguridad de registros almacenados.

logging.logback.rollingpolicy.max-history

LOGBACK_ROLLINGPOLICY_MAX_HISTORY

El número máximo de archivos en el archivo de registro que deben almacenarse.

Todos los sistemas de registro compatibles pueden acceder a las propiedades del sistema al analizar sus archivos de configuración. Vea ejemplos de configuraciones predeterminadas en spring-boot.jar:

Si necesita utilizar un marcador de posición en una propiedad de registro, debe ceñirse a la sintaxis de Spring Boot en lugar de la sintaxis del marco subyacente. En particular, si usa Logback, debe usar : como delimitador entre el nombre de la propiedad y su valor predeterminado, en lugar de :-.

Puede agregar contexto MDC y otro contenido especial a las líneas de registro anulando solo LOG_LEVEL_PATTERN (o logging.pattern.level en Logback). Por ejemplo, si usa logging.pattern.level=user:%X{user} %5p, entonces el formato de registro predeterminado contiene una entrada MDC para "usuario" si existe, como se muestra en la siguiente ejemplo.

2019-08-30 12:30:04.031 user:someone INFO 22174 --- [ nio-8080-exec-0] demo.Controller
Handling authenticated request

Extensiones de inicio de sesión

Spring Boot contiene una serie de extensiones para Logback que pueden simplificar la configuración en profundidad. Puede utilizar estas extensiones en el archivo de configuración logback-spring.xml.

Porque el estándar archivo de configuraciónlogback.xml se carga demasiado pronto y no se pueden usar extensiones en él. Debe utilizar logback-spring.xml o definir la propiedad logging.config.
Las extensiones no se pueden usar con el escaneo de configuración de Logback. Si intenta hacer esto, al realizar cambios en el archivo de configuración se registrará un error como uno de los siguientes:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current

Configuración específica del perfil

La etiqueta <springProfile> le permite incluir o excluir opcionalmente secciones de configuración basadas en perfiles Spring activos. Las secciones de perfil se admiten en cualquier parte del elemento <configuration>. Utilice el atributo name para especificar qué perfil acepta la configuración. La etiqueta <springProfile> puede contener un nombre de perfil (por ejemplo, staging) o una expresión de perfil. Una expresión de perfil le permite expresar una lógica de perfil más compleja (por ejemplo, producción y (eu-central | eu-west)). La siguiente lista muestra tres perfiles de muestra:


<springProfile name="staging">
            <!-- configuración que se activará si el perfil "staging" está activo -->
</springProfile>
<springProfile name="dev | staging">
             <!-- la configuración que se activará si el perfil "dev" o "staging" está activo -->
</springProfile>
<springProfile name="!production">
             <!-- configuración que se activará si el perfil "producción" está activo -->
</springProfile>

Propiedades del entorno

La etiqueta <springProperty> le permite abrir propiedades de Environment en Spring para usar en Logback. Esto puede resultar útil si necesita acceder a valores del archivo application.properties en su configuración de Logback. Esta etiqueta funciona igual que la etiqueta estándar <property> en Logback. Sin embargo, en lugar de establecer un value directo, establece la propiedad source (de Environment). Si necesita almacenar una propiedad fuera del alcance de accesibilidad local, puede utilizar el atributo scope. Si necesita un valor alternativo (en caso de que la propiedad no esté establecida en Environment), puede utilizar el atributo defaultValue. El siguiente ejemplo muestra cómo exponer propiedades para su uso en Logback:


<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
                defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>
Debe especificar source en el registro de kebab (por ejemplo, my.property-name). Sin embargo, las propiedades se pueden agregar a Environment usando reglas flexibles.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION