springboot日志没有记录异常问题及解决
更新时间:2025年02月19日 09:30:07 作者:FlowingRiver
在Spring Boot项目中,定时任务在服务器上运行时报错但未记录日志,本地运行时控制台能打印报错信息,但日志中无记录,问题出在报错发生在线程池中,通过继承ThreadPoolExecutor并重写afterExecute方法,可以将异常信息记录到日志中
springboot 日志没有记录异常
背景
springboot项目,放到服务器上跑,定时任务运行过程中中断,查看日志却发现没有报错。
在本地跑,发现控制台能打印报错信息,而日志也没有记录报错。
经排查,发现是因为报错出现在线程池中,没有在日志中记录。
原先使用线程池:
ExecutorService executorService = Executors.newFixedThreadPool(15);
解决
新建类继承ThreadPoolExecutor,重写afterExecute方法。
@Slf4j
public class TaskExecutor extends ThreadPoolExecutor {
public TaskExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if (t != null) {
log.error(t.getMessage(), t);
}
}
}
使用:
ExecutorService executorService = new TaskExecutor(10, 15,
0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>());日志中就有异常信息了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot 动态数据源的实现方法(Mybatis+Druid)
这篇文章主要介绍了springboot 动态数据源的实现方法(Mybatis+Druid),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-01-01
使用Java 8 Lambda表达式将实体映射到DTO的操作
这篇文章主要介绍了使用Java 8 Lambda表达式将实体映射到DTO的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-08-08
SpringMVC事件监听ApplicationListener实例解析
这篇文章主要介绍了SpringMVC事件监听ApplicationListener实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-11-11


最新评论