调试工具
调试工具是开发过程中快速定位和解决问题的关键,包含日志工具、性能分析工具、链路追踪工具等。
📋 调试工具体系
🎯 日志工具
1. Logback 日志
Logback是SLF4J的实现,是Java应用最常用的日志框架。
1.1 Logback 配置
完整配置示例:
xml
<configuration>
<!-- 定义日志文件路径 -->
<property name="LOG_HOME" value="/var/log/app" />
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 错误日志单独输出 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/error.log</file>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>90</maxHistory>
</rollingPolicy>
</appender>
<!-- 异步日志 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="FILE" />
</appender>
<!-- 日志级别配置 -->
<logger name="com.example.service" level="DEBUG" />
<logger name="org.springframework" level="INFO" />
<logger name="org.mybatis" level="DEBUG" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ASYNC" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>1.2 日志最佳实践
日志级别使用:
| 级别 | 用途 | 示例 |
|---|---|---|
| DEBUG | 调试信息,详细信息 | 方法参数、返回值 |
| INFO | 一般信息,关键业务流程 | 用户登录、订单创建 |
| WARN | 警告信息,潜在问题 | 慢查询、资源不足 |
| ERROR | 错误信息,需要处理的问题 | 异常、错误 |
日志内容规范:
java
// ✅ 好的日志
logger.info("User logged in: userId={}, ip={}", userId, ip);
logger.warn("Slow query detected: duration={}ms, sql={}", duration, sql);
logger.error("Failed to process payment: orderId={}", orderId, exception);
// ❌ 不好的日志
logger.info("User logged in"); // 缺少关键信息
logger.error("Error occurred"); // 缺少错误详情
logger.debug(user.toString()); // 可能包含敏感信息参考资源:
- Logback 官方文档
- 视频推荐:Logback 日志配置实战
- 书籍推荐:《Logback实战》
2. 性能分析工具
2.1 JProfiler
JProfiler是商业化的Java性能分析工具,功能强大。
主要功能:
- CPU分析:分析CPU使用情况,定位性能瓶颈
- 内存分析:分析内存使用情况,定位内存泄漏
- 线程分析:分析线程状态,定位死锁问题
- 数据库分析:分析SQL执行情况,优化慢查询
使用示例:
CPU分析
- 查看CPU热点方法
- 分析方法调用树
- 优化热点代码
内存分析
- 查看内存使用情况
- 分析对象分配
- 定位内存泄漏
参考资源:
2.2 VisualVM
VisualVM是Oracle提供的免费Java性能分析工具。
主要功能:
- CPU分析:CPU性能分析
- 内存分析:内存使用分析
- 线程分析:线程状态分析
- 堆转储:生成堆转储文件
参考资源:
2.3 Arthas
Arthas是阿里开源的Java诊断工具,支持在线诊断。
主要功能:
- 实时监控:实时监控JVM状态
- 方法调用:动态调用方法
- 类加载:查看类加载信息
- 线程诊断:诊断线程问题
使用示例:
bash
# 启动Arthas
java -jar arthas-boot.jar
# 查看线程
thread
# 查看方法调用
watch com.example.service.UserService getUserById '{params,returnObj}' -x 2
# 查看JVM信息
jvm参考资源:
3. 链路追踪工具
3.1 SkyWalking
SkyWalking是Apache开源的APM系统,支持分布式链路追踪。
主要功能:
- 分布式追踪:追踪分布式请求调用链路
- 性能监控:监控应用性能指标
- 拓扑图:展示服务调用拓扑
- 告警:性能异常告警
架构图:
配置示例:
yaml
agent:
service_name: user-service
collector:
backend_service: skywalking-oap:11800参考资源:
- SkyWalking 官方文档
- 视频推荐:SkyWalking 链路追踪实战
- 书籍推荐:《分布式追踪实战》
3.2 Zipkin
Zipkin是Twitter开源的分布式追踪系统。
主要功能:
- 分布式追踪:追踪请求调用链路
- 时序图:展示请求时序
- 服务依赖:展示服务依赖关系
参考资源:
3.3 Jaeger
Jaeger是Uber开源的分布式追踪系统。
主要功能:
- 分布式追踪:追踪请求调用链路
- 性能分析:分析请求性能
- 服务地图:展示服务调用关系
参考资源:
📋 调试技巧
1. 日志调试
技巧:
- 结构化日志:使用结构化日志格式
- 日志级别:合理使用日志级别
- 上下文信息:记录足够的上下文信息
- 敏感信息:避免记录敏感信息
2. 断点调试
技巧:
- 条件断点:设置条件断点
- 日志断点:使用日志断点
- 异常断点:捕获异常断点
3. 性能调试
技巧:
- 性能分析:使用性能分析工具
- 慢查询分析:分析慢查询
- 内存分析:分析内存使用
📖 学习资源
视频教程
书籍推荐
- 《Java性能优化实战》 - 深入讲解Java性能优化
- 《深入理解JVM》 - JVM原理和调优
- 《分布式追踪实战》 - 分布式追踪最佳实践
- 《日志管理与分析》 - 日志管理最佳实践
网站资源
工具推荐
- 日志工具:Logback、Log4j2、ELK
- 性能分析工具:JProfiler、VisualVM、Arthas
- 链路追踪工具:SkyWalking、Zipkin、Jaeger
- 调试工具:IDE调试器、Postman、curl
✅ 调试工具检查清单
- [ ] 日志工具已配置
- [ ] 日志级别合理设置
- [ ] 日志内容规范
- [ ] 性能分析工具已配置
- [ ] 链路追踪工具已配置
- [ ] 调试技巧已掌握
- [ ] 问题定位效率高