Spring Boot: ¿Cómo puedo establecer el nivel de registro con application.properties?


301

Esta es una pregunta muy simple, pero no puedo encontrar información.
(Tal vez mi conocimiento sobre los frameworks de Java es muy escaso)

¿Cómo puedo establecer el nivel de registro con application.properties?
¿Y la ubicación del archivo de registro, etc.?


1
Para el registro, otra opción es establecer el nivel de registro como variable de entorno, por ejemplo, a través del panel de control de heroku. En Settings-> Config Varsestablecer logging.level.com.yourpackageen el nivel deseado (INFORMACIÓN, ERROR, DEPURACIÓN).
LukeSolar

Respuestas:


355

Actualización: a partir de Spring Boot v1.2.0.RELEASE, se aplica la configuración application.propertieso se application.ymlaplica. Consulte la sección Niveles de registro de la guía de referencia.

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

Para versiones anteriores de Spring Boot no puede. Simplemente tiene que usar la configuración normal para su marco de registro (log4j, logback) para eso. Agregue el archivo de configuración apropiado ( log4j.xmlo logback.xml) al src/main/resourcesdirectorio y configúrelo a su gusto.

Puede habilitar el registro de depuración especificando --debugal iniciar la aplicación desde la línea de comandos.

Spring Boot también proporciona un buen punto de partida para el inicio de sesión para configurar algunos valores predeterminados, colorear, etc. el archivo base.xml que simplemente puede incluir en su archivo logback.xml. (Esto también se recomienda desde el logback.xml predeterminado en Spring Boot.

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
Normalmente, todo lo que puede hacer en la línea de comando funciona en un archivo de configuración externo. Entonces debug = true lo haría, creo. Esa bandera es un poco especial porque el registro debe inicializarse muy temprano, pero creo que funcionaría.
Dave Syer

77
Por cierto, el sistema de registro preferido es el inicio de sesión, y eso es lo que obtienes por defecto de los poms de inicio. Por lo tanto, logback.xml es la herramienta más común para configurar el registro de forma precisa. El indicador --debug solo activa algunos canales de registro Spring seleccionados.
Dave Syer

Otro consejo, la bota de primavera incluye una buena base.xml . Lo cual es un buen punto de partida. (Ver mi respuesta extendida).
M. Deinum

@ M.Deinum Gracias de nuevo por tu gran consejo! Ahora puedo cambiar el nivel de registro de mi propio código.
zeodtr

2
Parece que podemos, ahora. En cuanto a Spring v4.1.3.RELEASE (con Spring Boot v1.2.0.RELEASE), la configuración en application.propertieso se application.ymlaplica, según respondió Richard (módulo :o =problema --- el colon parece funcionar para mí).
Eric Platon

108

Puede hacerlo utilizando su application.properties.

logging.level.=ERROR-> Establece el nivel de registro raíz en error
...
logging.level.=DEBUG-> Establece el nivel de registro raíz en DEBUG

logging.file=${java.io.tmpdir}/myapp.log-> Establece la ruta absoluta del archivo de registro a TMPDIR / myapp.log

Un conjunto predeterminado de aplicaciones.propiedades sensatas con respecto al registro utilizando perfiles sería: application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties:

logging.level.=DEBUG
logging.file=

Cuando desarrolla dentro de su IDE favorito, simplemente agrega un -Dspring.profiles.active=devargumento como VM a la configuración de ejecución / depuración de su aplicación.

Esto le dará error solo al iniciar sesión en la producción y el registro de depuración durante el desarrollo SIN escribir el resultado en un archivo de registro. Esto mejorará el rendimiento durante el desarrollo (y ahorrará unidades SSD algunas horas de operación;)).


1
El signo '=' para la asignación no funcionó. La asignación se realizó con un ':' como separador. logging.level.:DEBUG
randominstanceOfLivingThing

2
Extraño, tengo esta configuración trabajando en un proyecto de ejemplo. Los signos '' (espacio), '=' y ':' se tratan por igual como separador, excepto en los casos en que se usan separadores en las teclas. ¿Estás seguro de que tu clave no contenía espacios en blanco?
Richard

1
Puede confirmar que ":" funciona pero "=" se ignora. Editar: Habló pronto, había un espacio entre "=" y el nivel. Todo funciona ahora.
Mike R

1
Esto no funciona en mi prueba con spring-boot 1.4.0: logging.level.=DEBUGhará que la aplicación no se inicie y obtenga un error:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
Me parece que logging.level.es solo un atajo sintáctico conveniente para logging.level.root, que podría preferirse como (1) menos propenso a confundirse con un error tipográfico, (2) potencialmente más explícito y (3) trabajando con el =signo de asignación, que proporciona una mayor coherencia general al archivo de configuración.
Alain BECKER

66

La forma correcta de establecer el nivel de registro raíz es mediante la propiedad logging.level.root. Consulte la documentación , que se ha actualizado desde que se hizo originalmente esta pregunta.

Ejemplo:

logging.level.root=WARN

15

Supongamos que su aplicación tiene el nombre del paquete como com.company.myproject. Luego puede establecer el nivel de registro para las clases dentro de su proyecto como se indica a continuación en los archivos application.properties

logging.level.com.company.myproject = DEPURACIÓN

logging.level.org.springframework.web = DEBUGy logging.level.org.hibernate = DEBUGestablecerá el nivel de registro para las clases de Spring framework web e Hibernate únicamente.

Para configurar la ubicación del archivo de registro use

logging.file = /home/ubuntu/myproject.log


14

Si está en Spring Boot, puede agregar directamente las siguientes propiedades en el archivo application.properties para establecer el nivel de registro, personalizar el patrón de registro y almacenar registros en el archivo externo.

Estos son diferentes niveles de registro y su orden de mínimo << máximo.

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

Pase por este enlace para personalizar su registro más vívidamente.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


No sé por qué, pero logging.level.tech.hardik = trace esto no funciona en mi caso cuando pongo logging.level.roo = trace está funcionando
Arvind Kumar

10

Asegurarse de que la sugerencia de Dave Syer reciba algo de amor, porque agregar debug=truea application.properties efectivamente permitirá el registro de depuración.


8

En caso de que desee utilizar un marco de registro diferente, log4j, por ejemplo, encontré que el enfoque más fácil es desactivar el registro propio de Spring Boots e implementar el suyo. De esa manera puedo configurar cada nivel de registro dentro de un archivo, log4j.xml (en mi caso).

Para lograr esto, simplemente tiene que agregar esas líneas a su pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</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-log4j</artifactId>
</dependency>

Probablemente ya tenga la primera dependencia y solo necesite las otras dos. Tenga en cuenta que este ejemplo solo cubre log4j.
¡Eso es todo, ahora está listo para configurar el registro para el arranque dentro de su archivo de configuración log4j!


Esta exclusión funcionó para mí. Mi API REST no se seleccionó mi dependencia log4j y log4j.properties.
ankitjaininfo

ahora también tienen spring-boot-starter-log4j2
Kalpesh Soni

4

Puede intentar establecer el nivel de registro en DEPURAR, mostrará todo al iniciar la aplicación

logging.level.root=DEBUG

3

Para los registros: la documentación oficial , como para Spring Boot v1.2.0.RELEASE y Spring v4.1.3.RELEASE:

Si el único cambio que necesita realizar en el registro es establecer los niveles de varios registradores, puede hacerlo en application.properties utilizando el prefijo "logging.level", por ejemplo

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

También puede establecer la ubicación de un archivo para iniciar sesión (además de la consola) usando "logging.file".

Para configurar los ajustes más específicos de un sistema de registro, debe usar el formato de configuración nativo compatible con el sistema de registro en cuestión. De forma predeterminada, Spring Boot recoge la configuración nativa de su ubicación predeterminada para el sistema (por ejemplo, classpath: logback.xml para Logback), pero puede establecer la ubicación del archivo de configuración utilizando la propiedad "logging.config".


2

Si desea establecer más detalles, agregue un nombre de archivo de configuración de registro "logback.xml" o "logback-spring.xml".

en su archivo application.properties, ingrese así:

logging.config: classpath:logback-spring.xml

en loback-spring.xml, entrada como esta:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>

2

Las respuestas existentes son geniales. Solo quiero compartir con ustedes una nueva función de arranque de primavera que permite agrupar registros y establecer el nivel de registro en todo el grupo.

Ejemplo de los documentos:

  • Crear un grupo de registro
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • Establecer el nivel de registro para el grupo
logging.level.tomcat=TRACE

Es una buena característica que brinda más flexibilidad.


2

En mi configuración actual, lo tengo definido en application.yaml así:

logging:
  level:
    ROOT: TRACE

Estoy usando spring-boot: 2.2.0.RELEASE. Puede definir cualquier paquete que debería tener el nivel TRACE como ese.


1
Esto se configura a nivel de aplicación. OP quiere rastrear solo los registros de hibernación para los que necesitaría un filtro de nivel de paquete en la configuración de registro
Sudip Bhandari

2

en el proyecto de arranque de primavera podemos escribir logging.level.root = WARN pero aquí el problema es que tenemos que reiniciar nuevamente, incluso agregamos dependencia de devtools, en el archivo de propiedades si se modifica cualquier valor no será autodetectable, por esta limitación llegué a saber la solución i, e podemos agregar un actuador en pom.xml y pasar el nivel del registrador como se muestra a continuación en el cliente cartero en la barra de URL http: // localhost: 8080 / loggers / ROOT o http: // localhost: 8080 / loggers / com .mycompany y en el cuerpo puedes pasar el formato json como abajo

{
  "configuredLevel": "WARN"
}

1

En caso de eclipse IDE y su proyecto es maven, recuerde limpiar y construir el proyecto para reflejar los cambios.


1

Con Springboot 2 puede establecer el Nivel de registro raíz con una Variable de entorno como esta:

logging.level.root=DEBUG

O puede establecer un registro específico para paquetes como este:

logging.level.my.package.name=TRACE

para la configuración de variables de entorno, preferiría usar:, LOGGING_LEVEL_ROOT=DEBUGusando la sintaxis de camello
Anthony Dahanne
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.