java - spring-boot 记录新线程的运行时异常

标签 java spring multithreading logging exception

我的 spring-boot 1.3.5.RELEASE 应用程序上有一个 REST API,使用 ThreadPoolExecutor 从中异步启动一个进程。

我的问题是,异步进程恰好会针对未处理的场景抛出运行时异常,但堆栈跟踪不会进入我的日志。我正在使用 log4j。

这是一个大问题,因为需要花费大量时间来调试并查看实际问题是什么。

我知道@ControllerAdvice,但我认为当新线程启动并且spring不再拦截异常时,上下文就结束了。

如何配置 ThreadPoolExecutor 将未捕获的异常重定向到 spring 上下文,或者我应该如何解决这个问题?

我正在寻找一种通用解决方案来捕获这些类型的异常并将其堆栈跟踪添加到附加程序,因为我不知道开发人员将在哪里启动一个新线程,该线程将因未捕获的异常而崩溃

假设其余部分如下所示:

@RequestMapping("/api/test")
public void doSomething() {
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 10 , TimeUnit.SECONDS, new ArrayBlockingQueue<>(10, true));
    threadPoolExecutor.execute(() -> {
        throw new RuntimeException("some exception");
    });
}

最佳答案

您是否尝试过创建 @ControllerAdvice,向其中注入(inject) Throwable 并调用日志记录?

关于java - spring-boot 记录新线程的运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40178714/

相关文章:

适用于 Android 的 Java REST 客户端 API

java - 将 HTML 内容添加到与 JTextPane 关联的文档

java - 我可以在 JPA 中使用 @Query 的嵌套查询吗?

java - Lombok 不会在 hybris 自定义组件中生成 getter

java - 如何使用 Maven 创建 Spring 项目

java - ExecutorService 命名约定 Java

java - 如何根据空格数量分割字符串

java - 在 Java 中关闭数据库连接

c# - 如何防止一个方法跨多个线程运行?

java - java中如何在线程外获取结果