首頁 > Java > java教程 > 主體

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

WBOY
發布: 2023-05-14 08:25:13
轉載
1608 人瀏覽過

傳統的做法一般是:

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執行一個執行緒dumpYes

如果使用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"
}
登入後複製

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

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

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
Property#Default