You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2017/06/24 10:57:50 UTC

[4/8] logging-log4j2 git commit: LOG4J2-1926 moved ExtendedThreadInfoFactory out of ThreadDumpMessage class and make it a top-level class in log4j-core

LOG4J2-1926 moved ExtendedThreadInfoFactory out of ThreadDumpMessage class and make it a top-level class in log4j-core


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/75f519f7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/75f519f7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/75f519f7

Branch: refs/heads/master
Commit: 75f519f75cdd576b264c05af3d4608d6cb8d2f97
Parents: d0023de
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:54:29 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:54:29 2017 +0900

----------------------------------------------------------------------
 .../core/message/ExtendedThreadInfoFactory.java | 58 ++++++++++++++++++++
 1 file changed, 58 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/75f519f7/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInfoFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInfoFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInfoFactory.java
new file mode 100644
index 0000000..0079fbc
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInfoFactory.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.core.message;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
+import java.lang.management.ThreadMXBean;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.logging.log4j.message.ThreadDumpMessage;
+import org.apache.logging.log4j.message.ThreadInformation;
+
+/**
+ * Factory to create extended thread information.
+ */
+public class ExtendedThreadInfoFactory implements ThreadDumpMessage.ThreadInfoFactory {
+    public ExtendedThreadInfoFactory() {
+        final Method[] methods = ThreadInfo.class.getMethods();
+        boolean basic = true;
+        for (final Method method : methods) {
+            if (method.getName().equals("getLockInfo")) {
+                basic = false;
+                break;
+            }
+        }
+        if (basic) {
+            throw new IllegalStateException();
+        }
+    }
+    @Override
+    public Map<ThreadInformation, StackTraceElement[]> createThreadInfo() {
+        final ThreadMXBean bean = ManagementFactory.getThreadMXBean();
+        final ThreadInfo[] array = bean.dumpAllThreads(true, true);
+
+        final Map<ThreadInformation, StackTraceElement[]>  threads =
+            new HashMap<>(array.length);
+        for (final ThreadInfo info : array) {
+            threads.put(new ExtendedThreadInformation(info), info.getStackTrace());
+        }
+        return threads;
+    }
+}