Samir Padhy
He implementado la aplicación springboot en PCF. Quiero registrar el mensaje en función de la variable de entorno. ¿Qué debo hacer para que el cambio del nivel de registro del tiempo de ejecución funcione sin reiniciar la aplicación?
Se puede cambiar el nivel de registro en Spring Boot 1.5+ con un punto final http
Agregar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
y de lo que puedes usar
curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch" \
-H "Content-Type: application/json; charset=utf-8" \
-d $'{
"configuredLevel": "WARN"
}'
Donde todo más allá de /loggers/ es el nombre del registrador.
Si ejecuta esto en PCF, es aún mejor: esto es compatible directamente desde su backend.
-
Vale la pena enfatizar que el punto final de los registradores de Actuator se agregó en 1.5.1 y si tiene una aplicación Spring Boot más antigua que usa
–Kevin Hooke
10 de febrero de 2018 a las 1:57
-
Para Spring Boot 2.1, debe asegurarse de que el punto final de los registradores esté expuesto a la web agregando el valor de los registradores a la configuración management.endpoints.web.exposure.include. Si no tiene esa línea en su
application.properties
archivo, que agregar:management.endpoints.web.exposure.include=health,info,loggers
ya que su valor predeterminado es salud, información-Dennis
27 de noviembre de 2018 a las 16:25
-
En este artículo se describe el proceso: blog.codeleak.pl/2017/03/… . No olvide agregar el atributo scan=true en logback.xml como está escrito aquí: stackoverflow.com/a/42575844/379173
– Enrico Giurin
15 de enero de 2019 a las 18:32
Alexander Weiß
Para Spring Boot 2.1.5+:
Primero, necesita el complemento del actuador:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
En segundo lugar, debe exponer el punto final como dijo Dennis en su comentario (loggers
está deshabilitado por defecto):
management.endpoints.web.exposure.include=health,info,loggers
Finalmente, puede usar los puntos finales de descanso para obtener información sobre los registradores y establecer los niveles de registro.
curl -X "GET" "http://localhost:8080/actuator/loggers"
Para configurar el Root
Nivel de registro que puede usar
curl -X "POST" "http://localhost:8080/actuator/loggers/ROOT" -H "Content-Type: application/json; charset=utf-8" -d $'{ "configuredLevel": "INFO" }'
-
¡Gracias! los
management.endpoints.web.exposure.include=...,loggers
propiedad era la pieza que faltaba!– t0r0X
9 de agosto de 2019 a las 13:21
Kihats
Esta es una extensión de la respuesta de @Michael Simons. Con este método, tendrá una interfaz de usuario para hacerlo:
Este método es un poco más largo pero resuelve mucho mucho mas. Vamos a utilizar una herramienta llamada Servidor de administración Spring Boot.
-
Primero necesitas incluir algunas dependencias
<!--Dependency for registering your app as a Spring Boot Admin Server--> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version>1.3.3</version> </dependency> <!--Provide a nice looking ui--> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>1.3.3</version> </dependency> <!--Dependency for registering your app as a Spring Boot Admin Client--> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.jolokia</groupId> <artifactId>jolokia-core</artifactId> </dependency>
-
Habilite su aplicación para que sea un servidor de administración Spring Boot usando la anotación
@EnableAdminServer
.@SpringBootApplication @EnableAdminServer public class Application { public static void main(String[] args) { // ... your code as before ... } }
-
En tus
application.properties
agrega lo siguiente:Registre su aplicación en el servidor de administración de Spring Boot, que sigue siendo su aplicación
spring.boot.admin.url=http://localhost:8031
Indique al servidor de administración de Spring Boot dónde encontrar el cliente
// For versions 2.*.* spring.boot.admin.client.url=http://localhost:8031 // For versions 1.*.* spring.boot.admin.client.service-url=http://localhost:8031 spring.boot.admin.client.management-url=http://localhost:8031 spring.boot.admin.client.health-url=http://localhost:8031/health
-
En tus
logback.xml
solo agrega la siguiente linea<jmxConfigurator/>
. Esto permite la configuración del inicio de sesión a través de JMX. Más información aquí
… y listo estás listo. Ahora puede cambiar el nivel de depuración de cualquier registrador en tiempo de ejecución.
i. Simplemente visite la URL de su servidor de administración de Spring Boot; en nuestro caso, aquí (http:/localhost:8031
).
ii. En la página de inicio se mostrará una lista de las aplicaciones (clientes) registradas.
iii. Hacer clic Details
contra los clientes registrados que lo llevará a otra página.
IV. Haga clic en el Logging
pestaña que enumerará todos los registradores registrados en su aplicación.
v. Puede cambiar los niveles de registro; cambiará su nivel de registro en tiempo de ejecución. Aquí tienes un fragmento de lo que esperas
sai prateek
Si estás usando logback
api para configurar el inicio de sesión en el proyecto, entonces puede usar el Auto escáner característica de logback
API. Según la documentación
logback-classic buscará cambios en su archivo de configuración y se reconfigurará automáticamente cuando cambie el archivo de configuración. Para instruir a logback-classic para buscar cambios en su archivo de configuración y reconfigurarse automáticamente, establezca el atributo de escaneo del elemento en verdadero.
<configuration scan="true">
...
</configuration>
Frecuencia de escaneo: “By default, the configuration file will be scanned for changes once every minute
“. Ver el logback
documentación de la API para más detalles.
Desde Spring Boot 1.5.x, puede usar el punto final del registrador para enviar el nivel de registro deseado.
andy marrón
El proveedor de registro predeterminado es logback. Para configurar su sistema de modo que el nivel de registro se pueda cambiar en tiempo de ejecución, debe realizar los siguientes pasos:
primero en src/main/resources
crear una configuración de inicio de sesión personalizada llamada logback-spring.xml
que incluye el configurador predeterminado de Spring y luego agrega la directiva que expone la configuración de inicio de sesión sobre JMX:
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator />
</configuration>
Ahora agregue una dependencia en el puente Jolokia JMX-over-HTTP: org.jolokia:jolokia-core
.
Ahora debería poder golpear /jolokia
puntos finales en su aplicación Spring Boot. el protocolo es documentado aquí. No es lindo. Para empezar, aquí hay algunos GET
ejemplos que puede acceder directamente desde un navegador:
Mostrar el nivel del registrador ROOT:
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/getLoggerLevel/ROOT
Cambie el nivel del registrador ROOT para depurar:
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/setLoggerLevel/ROOT/debug
spring-boot-actuator es consciente de la /jolokia
punto final y está marcado sensitive=true
por lo tanto, si tiene Spring-Security en el classpath, requerirá autenticación.
Puede usar el siguiente código en el controlador y llamar a la API para cambiar el nivel de registro
@PostMapping("/changeloglevel")
public void changeloglevel(@RequestParam String loglevel)
{
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
loggerContext.getLogger("package where springboot main class resides").setLevel(Level.toLevel(loglevel));
}
El nivel de registro puede ser ERROR, INFO, WARN, etc.
-
java.lang.ClassCastException: la clase org.apache.logging.slf4j.Log4jLoggerFactory no se puede convertir a la clase org.apache.logging.log4j.core.LoggerContext
– Peterson V.
15 de agosto de 2020 a las 14:06
-
@PetersonV, revise sus importaciones y asegúrese de usar las clases de inicio de sesión correctas, no las clases log4j u otras
– ahmednabil88
21 de septiembre a las 23:11
-
más si necesita establecer el nivel de registro globalmente para todas las clases [for root]puedes por
loggerContext.getLogger(Logger.ROOT_LOGGER_NAME).setLevel(Level.valueOf(loglevel));
– ahmednabil88
21 de septiembre a las 23:12