Skip to content

调试工具 ​

调试工具是开发过程中快速定位和解决问题的关键,包含日志工具、性能分析工具、链路追踪工具等。

📋 调试工具体系 ​

🎯 日志工具 ​

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());  // 可能包含敏感信息

参考资源:

2. 性能分析工具 ​

2.1 JProfiler ​

JProfiler是商业化的Java性能分析工具,功能强大。

主要功能:

  • CPU分析:分析CPU使用情况,定位性能瓶颈
  • 内存分析:分析内存使用情况,定位内存泄漏
  • 线程分析:分析线程状态,定位死锁问题
  • 数据库分析:分析SQL执行情况,优化慢查询

使用示例:

  1. CPU分析

    • 查看CPU热点方法
    • 分析方法调用树
    • 优化热点代码
  2. 内存分析

    • 查看内存使用情况
    • 分析对象分配
    • 定位内存泄漏

参考资源:

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

参考资源:

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

✅ 调试工具检查清单 ​

  • [ ] 日志工具已配置
  • [ ] 日志级别合理设置
  • [ ] 日志内容规范
  • [ ] 性能分析工具已配置
  • [ ] 链路追踪工具已配置
  • [ ] 调试技巧已掌握
  • [ ] 问题定位效率高

上一章节:开发工具
返回目录:开发与调试概览
下一章节:测试能力