springboot日志沒有記錄異常問題及解決
更新時間:2025年02月19日 09:30:07 作者:FlowingRiver
在Spring Boot項目中,定時任務(wù)在服務(wù)器上運行時報錯但未記錄日志,本地運行時控制臺能打印報錯信息,但日志中無記錄,問題出在報錯發(fā)生在線程池中,通過繼承ThreadPoolExecutor并重寫afterExecute方法,可以將異常信息記錄到日志中
springboot 日志沒有記錄異常
背景
springboot項目,放到服務(wù)器上跑,定時任務(wù)運行過程中中斷,查看日志卻發(fā)現(xiàn)沒有報錯。
在本地跑,發(fā)現(xiàn)控制臺能打印報錯信息,而日志也沒有記錄報錯。
經(jīng)排查,發(fā)現(xiàn)是因為報錯出現(xiàn)在線程池中,沒有在日志中記錄。
原先使用線程池:
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<>());
日志中就有異常信息了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Validation實現(xiàn)數(shù)據(jù)校驗的示例
Spring?Validation其實就是對Hibernate?Validator進一步的封裝,方便在Spring中使用,這篇文章主要介紹了Spring?Validation實現(xiàn)數(shù)據(jù)校驗的示例,需要的朋友可以參考下2023-03-03解析spring-security權(quán)限控制和校驗的問題
這篇文章主要介紹了解析spring-security權(quán)限控制和校驗的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03@Valid 校驗無效,BindingResult未獲得錯誤的解決
這篇文章主要介紹了@Valid 校驗無效,BindingResult未獲得錯誤的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10