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<>());日志中就有异常信息了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论