Spring Boot Debug and Log

Jan 23, 2017


当需要在Spring Boot中定位问题时,主要的两种方式是远程Debug和根据Log查找线索。

远程Debug

设置bootRun任务中的jvmArgs属性

在build.gradle中

bootRun {
    jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
}

而后在Intellij Idea中配置Debug的配置,Run -> Edit Configurations而后增加一条Remote Debug的配置。

Idea Remote Debug配置
Idea Remote Debug配置

在相应代码位置增加断点就可以进行调试了。对于Spring程序,基本所有的Request都会被DisptachServlet中doDispatch方法处理,可以在此函数中下断点。如下是访问本地Spring Boot程序 http://localhost:8080/users/abc 时断点停在了Controller中。

Idea Remote Debug例子
Idea Remote Debug例子

命令行

./gradlew bootRun --debug-jvm

而后在Idea中增加Remote Debug的配置,并进行debug。

Log

application.properties配置logger

配置logging.level.root=debugdebug=true,启动Spring Boot程序时可以看到Spring Boot以及Spring框架的Debug级别的Log。

或者可以配置某个Package的Log级别,如logging.level.root.cn.xxx=debug

如果想让console打印的log有颜色上的区别,可以设置spring.output.ansi.enabled=always

如果要将Log打印到某个文件中,设置logging.path=/tmp, 启动程序后会发现在/tmp目录下产生了sprint.log。设置logging.file=test.log不起作用,可以参考Spring Boot - no log file written (logging.file is not respected)

参考资料