Rumah  >  Artikel  >  Java  >  Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?

Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?

WBOY
WBOYke hadapan
2023-05-14 08:25:131602semak imbas

Pendekatan tradisional secara amnya:

1 Ubah suai tahap log dalam konfigurasi

2 Mulakan semula aplikasi

3 masalah apabila masalah berulang

Proses ini memerlukan memulakan semula aplikasi, yang lebih menyusahkan dan kurang cekap Selain itu, untuk projek dalam talian berskala besar, adalah mustahil untuk berhenti dan memulakan semula sesuka hati. Jadi adakah terdapat cara untuk menukar tahap log secara dinamik tanpa memulakan semula aplikasi?

Sekarang, izinkan Lao Wan mengajar anda cara mengubah suai tahap log secara dinamik melalui komponen penggerak SpringBoot.

1. Tambahkan kebergantungan

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

2 Konfigurasikan port yang didedahkan oleh penggerak

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

Di sini saya mengubah suai laluan akses lalai penggerak/penggerak kepada /message, kerana Ia adalah disimpan selaras dengan laluan akses asas projek.

Dua kaedah konfigurasi untuk mendayakan port:

Kaedah 1: (Disyorkan)

management.endpoints.web.exposure.include=loggers

Kaedah 2: (Uji dengan cara ini) Tidak berkuat kuasa)

management.endpoint.loggers.enabled=true

Tambahan: Cara melumpuhkan port maklumat

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

Mengenai komponen penggerak, yang dipanggil salah satu daripada 4 komponen utama but spring dan mempunyai fungsi yang berkuasa Semua orang boleh mencari beberapa maklumat di Internet untuk mengetahui lebih lanjut.

Perihalan port titik akhir penggerak:

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

Jika anda menggunakan aplikasi web (Spring MVC, Spring WebFlux atau Jersey), anda juga boleh menggunakan titik akhir berikut:

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

Untuk menukar titik akhir yang terdedah, gunakan atribut termasuk dan kecualikan khusus teknologi berikut:

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相关端口的权限认证。

Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?

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

Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?

五、发起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"
}

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

Atas ialah kandungan terperinci Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam