傳統的做法一般是:
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屬性:
Property | #Default |
---|
##management. endpoints.jmx.exposure.exclude | * |
#management.endpoints.jmx.exposure.include | #* |
#management.endpoints.web.exposure.exclude | * |
management.endpoints.web.exposure.include | info, 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相关端口的权限认证。

此外,如果存在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去访问。

五、发起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中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Springboot怎麼整合Jasypt實現設定檔加密
Jun 01, 2023 am 08:55 AM
Jasypt介紹Jasypt是一個java庫,它允許開發員以最少的努力為他/她的專案添加基本的加密功能,並且不需要對加密工作原理有深入的了解用於單向和雙向加密的高安全性、基於標準的加密技術。加密密碼,文本,數字,二進位檔案...適合整合到基於Spring的應用程式中,開放API,用於任何JCE提供者...添加如下依賴:com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1Jasypt好處保護我們的系統安全,即使程式碼洩露,也可以保證資料來源的
SpringBoot怎麼整合Redisson實現延遲隊列
May 30, 2023 pm 02:40 PM
使用場景1、下單成功,30分鐘未支付。支付超時,自動取消訂單2、訂單簽收,簽收後7天未進行評估。訂單超時未評價,系統預設好評3、下單成功,商家5分鐘未接單,訂單取消4、配送超時,推播簡訊提醒…對於延時比較長的場景、即時性不高的場景,我們可以採用任務調度的方式定時輪詢處理。如:xxl-job今天我們採
怎麼在SpringBoot中使用Redis實現分散式鎖
Jun 03, 2023 am 08:16 AM
一、Redis實現分散式鎖原理為什麼需要分散式鎖在聊分散式鎖之前,有必要先解釋一下,為什麼需要分散式鎖。與分散式鎖相對就的是單機鎖,我們在寫多執行緒程式時,避免同時操作一個共享變數產生資料問題,通常會使用一把鎖來互斥以保證共享變數的正確性,其使用範圍是在同一個進程中。如果換做是多個進程,需要同時操作一個共享資源,如何互斥?現在的業務應用通常是微服務架構,這也意味著一個應用會部署多個進程,多個進程如果需要修改MySQL中的同一行記錄,為了避免操作亂序導致髒數據,此時就需要引入分佈式鎖了。想要實現分
springboot讀取檔案打成jar包後存取不到怎麼解決
Jun 03, 2023 pm 04:38 PM
springboot讀取文件,打成jar包後訪問不到最新開發出現一種情況,springboot打成jar包後讀取不到文件,原因是打包之後,文件的虛擬路徑是無效的,只能通過流去讀取。文件在resources下publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input
Springboot+Mybatis-plus不使用SQL語句進行多表新增怎麼實現
Jun 02, 2023 am 11:07 AM
在Springboot+Mybatis-plus不使用SQL語句進行多表添加操作我所遇到的問題準備工作在測試環境下模擬思維分解一下:創建出一個帶有參數的BrandDTO對像模擬對後台傳遞參數我所遇到的問題我們都知道,在我們使用Mybatis-plus中進行多表操作是極其困難的,如果你不使用Mybatis-plus-join這一類的工具,你只能去配置對應的Mapper.xml文件,配置又臭又長的ResultMap,然後再寫對應的sql語句,這種方法雖然看上去很麻煩,但具有很高的靈活性,可以讓我們
SpringBoot怎麼自訂Redis實作快取序列化
Jun 03, 2023 am 11:32 AM
1.自訂RedisTemplate1.1、RedisAPI預設序列化機制基於API的Redis快取實作是使用RedisTemplate範本進行資料快取操作的,這裡開啟RedisTemplate類,查看該類別的源碼資訊publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations,BeanClassLoaderAware{//聲明了value的各種序列化方式,初始值為空@NullableprivateRedisSe
SpringBoot與SpringMVC的比較及差別分析
Dec 29, 2023 am 11:02 AM
SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行
SpringBoot+Dubbo+Nacos 開發實戰教程
Aug 15, 2023 pm 04:49 PM
本文來寫個詳細的例子來說下dubbo+nacos+Spring Boot開發實戰。本文不會講述太多的理論的知識,會寫一個最簡單的例子來說明dubbo如何與nacos整合,快速建構開發環境。
See all articles