You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2022/09/21 05:10:27 UTC

[rocketmq] branch develop updated: [ISSUE #5095] Support output thread exception information to the error log (#5129)

This is an automated email from the ASF dual-hosted git repository.

lizhimin pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new 4fcacb60d [ISSUE #5095] Support output thread exception information to the error log (#5129)
4fcacb60d is described below

commit 4fcacb60d07f27f53ea76e846afd192e8ea74254
Author: lizhimins <70...@qq.com>
AuthorDate: Wed Sep 21 13:10:06 2022 +0800

    [ISSUE #5095] Support output thread exception information to the error log (#5129)
---
 .../java/org/apache/rocketmq/common/ThreadFactoryImpl.java   | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/common/src/main/java/org/apache/rocketmq/common/ThreadFactoryImpl.java b/common/src/main/java/org/apache/rocketmq/common/ThreadFactoryImpl.java
index a76f605f7..a21fb35c1 100644
--- a/common/src/main/java/org/apache/rocketmq/common/ThreadFactoryImpl.java
+++ b/common/src/main/java/org/apache/rocketmq/common/ThreadFactoryImpl.java
@@ -19,8 +19,14 @@ package org.apache.rocketmq.common;
 
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicLong;
+import org.apache.rocketmq.common.constant.LoggerName;
+import org.apache.rocketmq.logging.InternalLogger;
+import org.apache.rocketmq.logging.InternalLoggerFactory;
 
 public class ThreadFactoryImpl implements ThreadFactory {
+
+    private static final InternalLogger LOGGER = InternalLoggerFactory.getLogger(LoggerName.COMMON_LOGGER_NAME);
+
     private final AtomicLong threadIndex = new AtomicLong(0);
     private final String threadNamePrefix;
     private final boolean daemon;
@@ -51,6 +57,12 @@ public class ThreadFactoryImpl implements ThreadFactory {
     public Thread newThread(Runnable r) {
         Thread thread = new Thread(r, threadNamePrefix + this.threadIndex.incrementAndGet());
         thread.setDaemon(daemon);
+
+        // Log all uncaught exception
+        thread.setUncaughtExceptionHandler((t, e) ->
+            LOGGER.error("[BUG] Thread has an uncaught exception, threadId={}, threadName={}",
+                t.getId(), t.getName(), e));
+
         return thread;
     }
 }