Slf4j打印异常堆栈
一、前言
直接用logger.info("异常信息为:"+e)或者logger.info(e.getMessage())只能记录到异常的描述信息,却没有其异常具体发生在哪一行代码。
这样即使通过日志发现出现了异常,也没法马上定位问题。
因此就催生了一个想法,打印日志是否能像在IDE本地跑程序时出现未捕获的异常时,控制台能打印出完整的错误堆栈信息。
二、问题场景
日常开发中,经常在service实现层使用try-catch-finally保证代码的健壮性, 直接用logger.info("异常信息为:"+e)或者logger.info(e.getMessage())只能记录到异常的描述信息,无法打印完整异常堆栈信息,无法定位其异常具体发生在哪一行代码,当面对比较复杂的代码,那么排查问题将会非常麻烦。
直接用e.printStackTrace();
这种方式很占内存空间,尤其生产环境不能过多使用。
并且这种方式只是控制台打印,日志文件中不打印。
正确方法
复制@GetMapping("/hello")
public String sayHello(){
logger.info("hello Sfl4j + logback......");
try{
int i=3/0;
}catch(Exception e){
logger.error("错误消息:{}",e.getMessage(),e);
}
return helloService.sayHello();
}
}
小结:
1、Slf4j打印异常堆栈信息使用:
logger.error(String msg, Throwable t);------>logger.error(e.getMessage(),e);
logger.error(e);
或者
logger.info(String msg, Throwable t);------>logger.info(e.getMessage(),e);
规范示例:
复制 logger.error("错误消息:{}",e.getMessage(),e);
@Slf4j
log.error("错误消息:{}",e.getMessage(),e);
2、异常信息Exception e 的相关方法
- e.toString():获得异常类型和错误信息描述
- e.getMessage():获得错误信息描述
- e.printStackTrace():在控制台打印出异常堆栈(异常类型、错误信息描述和出错位置等)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!