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.?

zeodtr
fuente
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"/>     
M. Deinum
fuente
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;)).

Ricardo
fuente
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
La daga de Gilbert Arenas
fuente
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

shaunthomas999
fuente
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

Hardik Patel
fuente
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.

oravecz
fuente
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!

atripes
fuente
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
Ahmed Salem
fuente
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".

Eric Platon
fuente
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>
Sheldon Papa
fuente
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.

Martin Choraine
fuente
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.

fascynacja
fuente
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"
}
siddartha kamble
fuente
1

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

Sabarish Kumaran.V
fuente
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
Jakudaba
fuente
para la configuración de variables de entorno, preferiría usar:, LOGGING_LEVEL_ROOT=DEBUGusando la sintaxis de camello
Anthony Dahanne