在 Java Spring Boot 中,您可以通过集成日志框架(例如 Logback 或 Log4j2)实现在线 WebLog、动态修改日志级别、错误日志告警以及支持日志压制。
1. 集成 Logback(Spring Boot 默认日志框架)
Spring Boot 默认使用 Logback 作为日志框架,您可以利用它的功能来实现日志的动态配置。
2. 实现 WebLog(Web 控制台查看日志)
可以使用 Spring Boot Actuator 提供的 loggers 端点来查看和修改日志级别。此外,您也可以自定义日志界面,使用 Spring Boot 提供的 HTTP 端点来展示日志信息。
2.1 添加 Spring Boot Actuator 依赖
在 pom.xml 中添加 Actuator 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.2 配置 Actuator 的 Loggers 端点
在 application.yml 中启用日志端点:
management:
endpoints:
web:
exposure:
include: loggers
此时,您可以通过 /actuator/loggers 端点来查看和修改日志级别。
3. 动态修改日志级别
您可以通过 /actuator/loggers/{logger-name} 端点来动态修改日志级别。例如,修改某个包的日志级别为 DEBUG:
curl -X POST localhost:8080/actuator/loggers/com.example.demo -d '{"configuredLevel": "DEBUG"}' -H "Content-Type: application/json"
您也可以使用 GET 请求来查看当前的日志级别:
curl -X GET localhost:8080/actuator/loggers/com.example.demo
4. 错误日志告警
为了捕获并发送错误日志告警,您可以集成第三方监控工具(如 Prometheus, Grafana, ELK stack)来收集和告警。或者,您可以使用 Logback 自带的 Appender 来发送邮件或短信。
4.1 配置 Logback 发送告警邮件
在 src/main/resources/logback-spring.xml 中配置一个邮件告警 appender:
<configuration>
<appender name="MAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<to>admin@example.com</to>
<from>noreply@example.com</from>
<subject>Error log from Spring Boot application</subject>
<smtpHost>smtp.example.com</smtpHost>
<smtpPort>587</smtpPort>
<username>your-username</username>
<password>your-password</password>
<layout>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</layout>
</appender>
<logger name="org.springframework.web" level="ERROR">
<appender-ref ref="MAIL"/>
</logger>
</configuration>
当 org.springframework.web 包内的日志输出错误时,会自动发送邮件告警。
4.2 集成 Prometheus 和 Grafana
可以使用 Spring Boot 的 Actuator 集成 Prometheus,通过定期抓取日志数据并配置阈值来触发告警。具体步骤涉及到:
- 安装和配置 Prometheus 和 Grafana。
- 配置 Spring Boot 与 Prometheus 集成,通过 Actuator 端点导出指标数据。
- 在 Prometheus 中定义警报规则,在 Grafana 中配置告警图表。
5. 支持压制日志
日志压制通常是指通过过滤器或者某些配置,防止日志输出某些敏感或频繁的日志。Logback 提供了多种机制来过滤日志输出。
5.1 使用 Logback 的 ThresholdFilter 来压制日志
在 logback-spring.xml 中,您可以使用 ThresholdFilter 来限制某些日志级别的输出。
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/myapp.log</file>
<filter class="ch.qos.logback.core.filter.ThresholdFilter">
<level>INFO</level> <!-- 设置最低级别 -->
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
</configuration>
5.2 动态控制日志级别
如果需要根据某些条件动态调整日志级别(例如基于特定业务流程),您可以在运行时通过接口控制日志级别,如上所述通过 Actuator 动态修改日志级别。
总结:
- Web日志查看:通过 Spring Boot Actuator 提供的 /actuator/loggers 端点来查看和修改日志级别
- 动态修改日志级别:可以使用 Actuator 的 REST API 动态修改日志级别。
- 错误日志告警:通过集成 SMTP发送邮件,或使用监控工具(Prometheus, Grafana)进行日志告警。
- 日志压制:使用 Logback 配置文件中的过滤器(例如 ThresholdFilter)来过滤和压制不必要的日志。