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

Apakah operasi SpringBoot untuk mengubah suai tahap log secara dinamik?

WBOY
Lepaskan: 2023-05-14 08:25:13
ke hadapan
1628 orang telah melayarinya

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>
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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

management.endpoint.loggers.enabled=true
Salin selepas log masuk

Tambahan: Cara melumpuhkan port maklumat

management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
Salin selepas log masuk

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执行一个线程dumpYes

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:

PropertyDefault
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
Salin selepas log masuk

三、关闭鉴权

一般我们会将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()
}

}
Salin selepas log masuk

四 、通过/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
Salin selepas log masuk

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

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

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

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

{
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}
Salin selepas log masuk

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

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan