首頁  >  文章  >  Java  >  SpringBoot動態修改日誌等級的操作是什麼

SpringBoot動態修改日誌等級的操作是什麼

WBOY
WBOY轉載
2023-05-14 08:25:131558瀏覽

傳統的做法一般是:

1、設定裡修改日誌等級

2、重啟應用程式

3、問題複現查看報錯日誌排查問題

這個過程需要重啟應用,比較麻煩,效率較低,而且針對大型線上項目,不可能隨便停機重啟。那麼有沒有一種方式在不重啟應用的情況下實現動態修改日誌等級呢?

下面,讓老萬教你如何透過SpringBoot的actuator元件來實現動態修改日誌等級。

一、新增依賴

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

二、配置actuator暴露的連接埠

#启用actuator端口
management.endpoints.enabled-by-default=fasle
#设置actuator的访问根路径,默认是/actuator
management.endpoints.web.base-path=/message
#启用的端点
management.endpoints.web.exposure.include=loggers

這裡我修改了actuator的預設存取路徑/actuator,改為/message,為的是和專案的基礎存取路徑保存一致。

啟用連接埠的2中設定方法:

方式一:(建議)

management.endpoints.web.exposure.include=loggers

方式二:(這種方式測試沒有生效)

management.endpoint.loggers.enabled=true

補充:如何停用info連接埠

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true

關於actuator元件被稱為spring boot的4大元件之一,功能強大,大家在網路上自己找些資料進一步了解。

actuator的endpoint連接埠說明:

ID 描述 預設啟用
auditevents 顯示目前應用程式的稽核事件資訊 Yes
beans 顯示一個應用程式中所有Spring Beans的完整清單 Yes
#conditions 顯示設定類別和自動設定類別(configuration and auto- configuration classes)的狀態及它們被套用或未被應用的原因 Yes
configprops 顯示一個所有@ConfigurationProperties的集合清單 Yes
env 顯示來自Spring的ConfigurableEnvironment的屬性 Yes
flyway 顯示資料庫遷移路徑,如果有的話 Yes
#health 顯示應用程式的健康資訊(當使用一個未認證連線存取時顯示簡單的"status",使用認證連線存取則顯示全部資訊詳情) Yes
info 顯示任意的應用程式資訊 Yes
liquibase 展示任何Liquibase資料庫遷移路徑,如果有的話 Yes
metrics 展示目前應用的metrics資訊 Yes
mappings #顯示一個所有@RequestMapping路徑的集合清單 Yes
scheduledtasks 顯示應用程式中的排程任務 #Yes
sessions 允許從Spring會話支援的會話儲存中檢索和刪除(retrieval and deletion)使用者會話。使用Spring Session對反應性Web應用程式的支援時不可用。 Yes
shutdown 允許應用程式以優雅的方式關閉(預設不啟用) #No
threaddump 執行一個執行緒dump Yes

如果使用web應用(Spring MVC, Spring WebFlux, 或Jersey),你也可以使用以下端點:

#ID 說明 #預設啟用
#heapdum 傳回一個GZip壓縮的hprof堆dump檔 Yes
jolokia 透過HTTP暴露JMX beans(當Jolokia在類別路徑上時,WebFlux不可用) Yes
logfile 返回日誌檔案內容(如果設定了logging.file或logging.path屬性的話),支援使用HTTP Range頭接收日誌檔案內容的部分資訊 Yes
prometheus 以可以被Prometheus伺服器抓取的格式顯示metrics資訊 Yes

#要變更公開哪些端點,請使用下列技術特定的include和exclude屬性:

##management. endpoints.jmx.exposure.exclude*#management.endpoints.jmx.exposure.include#*#management.endpoints.web.exposure.exclude*management.endpoints.web.exposure.includeinfo, health

include属性列出了公开的端点的ID,

exclude属性列出了不应该公开的端点的ID

exclude属性优先于include属性。包含和排除属性都可以使用端点ID列表进行配置。

*可以用来选择所有端点。

例如,要通过HTTP公开除env和beans端点之外的所有内容,请使用以下属性:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans

三、关闭鉴权

一般我们会将actuator和spring security鉴权组件结合使用,防止这些功能端口被随便调用。由于这里是功能演示,先放开actuator相关端口的权限认证。

SpringBoot動態修改日誌等級的操作是什麼

此外,如果存在Spring Security,则需要添加自定义安全配置,以允许对端点进行未经身份验证的访问,如以下示例所示:放开所有Endpoint端点进行匹配

@Configuration
public class ActuatorSecurity extends WebSecurityConfigurerAdapter {
 
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.requestMatcher(EndpointRequest.toAnyEndpoint()).authorizeRequests()
    .anyRequest().permitAll()
}

}

四 、通过/loggers端口查看日志级别

请求链接:http://localhost:8090/message/loggers

注意上面我说过的,我调整了management.endpoints.web.base-path=/message。如果没有设置此参数,则使用默认的/actuator去访问。

SpringBoot動態修改日誌等級的操作是什麼

五、发起http请求修改日志级别

这里演示,修改目录com.wxswj.provider.message.controller的日志级别为debug

请求类型为POST,参数格式是JSON

curl -H "Content-Type: application/json" -X POST --data 
"
{
    "configuredLevel": "DEBUG"
}
" 
http://localhost:8090/message/loggers/com.wxswj.provider.message.controller

大家可以在服务器上通过curl发起http请求,或者通过Postman发起请求。

curl -H "Content-Type: application/json" -X POST --data "{"configuredLevel": "DEBUG"}" http://localhost:8090/loggers/com.wxswj.provider.message.controller

六、查询日志级别修改结果

http://localhost:8090/message/loggers/com.wxswj.provider.message.controller

{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}

说明我们的修改日志级别的请求生效。

Property #Default

以上是SpringBoot動態修改日誌等級的操作是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除