Sam*_*dhy 35 java logging spring pcf spring-boot
我在PCF中部署了springboot应用程序.我想根据环境变量记录消息.我应该怎么做才能在不重新启动应用程序的情况下运行时日志级别更改?
Mic*_*ons 41
可以使用http-endpoint更改Spring Boot 1.5+中的日志级别
加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
而且你可以使用
curl -X "POST" "http://localhost:8080/loggers/de.springbootbuch" \
-H "Content-Type: application/json; charset=utf-8" \
-d $'{
"configuredLevel": "WARN"
}'
Run Code Online (Sandbox Code Playgroud)
其中/ loggers /之外的所有内容都是记录器的名称.
如果你在PCF中运行它会变得更好:这是从它们的后端直接支持的.
这是@Michael Simons答案的扩展。使用此方法,您将具有一个用于执行此操作的UI:
这种方法要更长一些,但可以解决更多问题。我们将使用一个名为Spring Boot Admin Server的工具。
首先,您需要包括一些依赖项
<!--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>
Run Code Online (Sandbox Code Playgroud)使用注释,使您的应用成为Spring Boot Admin Server @EnableAdminServer
。
@SpringBootApplication
@EnableAdminServer
public class Application {
public static void main(String[] args) {
// ... your code as before ...
}
}
Run Code Online (Sandbox Code Playgroud)在您application.properties
添加以下内容:
将您的应用注册到仍然是您的应用的Spring Boot Admin Server
spring.boot.admin.url=http://localhost:8031
Run Code Online (Sandbox Code Playgroud)
指示Spring Boot Admin Server在哪里找到客户端
// 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
Run Code Online (Sandbox Code Playgroud)在您logback.xml
只需添加以下行<jmxConfigurator/>
。这允许通过JMX配置回发。更多信息在这里
... 瞧,您完成了。现在,您可以在运行时更改任何记录器的调试级别。
一世。只需访问您的Spring Boot Admin Server的URL(在本例中为http:/localhost:8031
)即可。
ii。注册的应用程序(客户端)列表将显示在主页上。
iii。单击Details
注册的客户,这将带您到另一个页面。
iv。单击Logging
选项卡,它将列出在您的应用程序中注册的所有记录器。
v。您可以更改日志级别,它将在运行时更改您的日志级别。这是您期望的摘要
如果您使用logback
api配置项目中的日志记录,则可以使用api 的AutoScan功能logback
.根据文件
logback-classic将扫描其配置文件中的更改,并在配置文件更改时自动重新配置.为了指示logback-classic扫描其配置文件中的更改并自动重新配置,请将该元素的scan属性设置为true.
<configuration scan="true">
...
</configuration>
Run Code Online (Sandbox Code Playgroud)
请查看By default, the configuration file will be scanned for changes once every minute
API文档以获取更多详细信息.
您可以在控制器中使用以下代码并调用API来更改日志级别
@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));
}
Run Code Online (Sandbox Code Playgroud)
日志级别可以是 ERROR、INFO、WARN 等
小智 6
对于Spring Boot 2.1.5+:
首先,您需要执行器插件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
其次,您需要像Dennis在评论中所说的那样暴露端点(loggers
默认情况下处于禁用状态):
management.endpoints.web.exposure.include=health,info,loggers
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用其余端点获取有关记录器的信息并设置记录级别。
curl -X "GET" "http://localhost:8080/actuator/loggers"
Run Code Online (Sandbox Code Playgroud)
要设置Root
日志记录级别,您可以使用
curl -X "POST" "http://localhost:8080/actuator/loggers/ROOT" -H "Content-Type: application/json; charset=utf-8" -d $'{ "configuredLevel": "INFO" }'
Run Code Online (Sandbox Code Playgroud)
默认的日志记录提供程序是 logback。要设置系统以便可以在运行时更改日志记录级别,您需要执行以下步骤:
首先src/main/resources
创建一个名为 的自定义 logback 配置logback-spring.xml
,其中包含 spring 的默认配置器,然后添加通过 JMX 公开 logback 配置的指令:
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<jmxConfigurator />
</configuration>
Run Code Online (Sandbox Code Playgroud)
现在添加对 Jolokia JMX-over-HTTP 桥的依赖项:org.jolokia:jolokia-core
。
您现在应该能够访问/jolokia
Spring Boot 应用程序上的端点。该协议记录在此处。这并不漂亮。为了帮助您入门,这里有一些GET
您可以直接从浏览器点击的示例:
显示 ROOT 记录器级别:
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/getLoggerLevel/ROOT
Run Code Online (Sandbox Code Playgroud)
更改 ROOT 记录器级别以进行调试:
/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/setLoggerLevel/ROOT/debug
Run Code Online (Sandbox Code Playgroud)
spring-boot-actuator 知道端点并被/jolokia
标记sensitive=true
,因此如果类路径上有 spring-security,那么它将需要身份验证。
归档时间: |
|
查看次数: |
37511 次 |
最近记录: |