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:51 UTC
[5/8] logging-log4j2 git commit: LOG4J2-1926 Facilitate Adroid use:
Moved ExtendedThreadInformation from log4j-api to log4j-core to avoid all
references to java.lang.management in log4j-api
LOG4J2-1926 Facilitate Adroid use: Moved ExtendedThreadInformation from log4j-api to log4j-core to avoid all references to java.lang.management in log4j-api
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/98eaaf98
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/98eaaf98
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/98eaaf98
Branch: refs/heads/master
Commit: 98eaaf9861156661f8d053adced0856fb7b54d6b
Parents: 75f519f
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:55:49 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:55:49 2017 +0900
----------------------------------------------------------------------
.../message/ExtendedThreadInformation.java | 166 ------------------
.../core/message/ExtendedThreadInformation.java | 167 +++++++++++++++++++
2 files changed, 167 insertions(+), 166 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/98eaaf98/log4j-api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java
deleted file mode 100644
index 208121c..0000000
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ExtendedThreadInformation.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * 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.message;
-
-import java.lang.management.LockInfo;
-import java.lang.management.MonitorInfo;
-import java.lang.management.ThreadInfo;
-
-import org.apache.logging.log4j.util.StringBuilders;
-
-/**
- * Provides information on locks and monitors in the thread dump. This class requires Java 1.6 to compile and
- * run.
- */
-class ExtendedThreadInformation implements ThreadInformation {
-
- private final ThreadInfo threadInfo;
-
- ExtendedThreadInformation(final ThreadInfo thread) {
- this.threadInfo = thread;
- }
-
- @Override
- public void printThreadInfo(final StringBuilder sb) {
- StringBuilders.appendDqValue(sb, threadInfo.getThreadName());
- sb.append(" Id=").append(threadInfo.getThreadId()).append(' ');
- formatState(sb, threadInfo);
- if (threadInfo.isSuspended()) {
- sb.append(" (suspended)");
- }
- if (threadInfo.isInNative()) {
- sb.append(" (in native)");
- }
- sb.append('\n');
- }
-
- @Override
- public void printStack(final StringBuilder sb, final StackTraceElement[] stack) {
- int i = 0;
- for (final StackTraceElement element : stack) {
- sb.append("\tat ").append(element.toString());
- sb.append('\n');
- if (i == 0 && threadInfo.getLockInfo() != null) {
- final Thread.State ts = threadInfo.getThreadState();
- switch (ts) {
- case BLOCKED:
- sb.append("\t- blocked on ");
- formatLock(sb, threadInfo.getLockInfo());
- sb.append('\n');
- break;
- case WAITING:
- sb.append("\t- waiting on ");
- formatLock(sb, threadInfo.getLockInfo());
- sb.append('\n');
- break;
- case TIMED_WAITING:
- sb.append("\t- waiting on ");
- formatLock(sb, threadInfo.getLockInfo());
- sb.append('\n');
- break;
- default:
- }
- }
-
- for (final MonitorInfo mi : threadInfo.getLockedMonitors()) {
- if (mi.getLockedStackDepth() == i) {
- sb.append("\t- locked ");
- formatLock(sb, mi);
- sb.append('\n');
- }
- }
- ++i;
- }
-
- final LockInfo[] locks = threadInfo.getLockedSynchronizers();
- if (locks.length > 0) {
- sb.append("\n\tNumber of locked synchronizers = ").append(locks.length).append('\n');
- for (final LockInfo li : locks) {
- sb.append("\t- ");
- formatLock(sb, li);
- sb.append('\n');
- }
- }
- }
-
- private void formatLock(final StringBuilder sb, final LockInfo lock) {
- sb.append('<').append(lock.getIdentityHashCode()).append("> (a ");
- sb.append(lock.getClassName()).append(')');
- }
-
- private void formatState(final StringBuilder sb, final ThreadInfo info) {
- final Thread.State state = info.getThreadState();
- sb.append(state);
- switch (state) {
- case BLOCKED: {
- sb.append(" (on object monitor owned by \"");
- sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId()).append(')');
- break;
- }
- case WAITING: {
- final StackTraceElement element = info.getStackTrace()[0];
- final String className = element.getClassName();
- final String method = element.getMethodName();
- if (className.equals("java.lang.Object") && method.equals("wait")) {
- sb.append(" (on object monitor");
- if (info.getLockOwnerName() != null) {
- sb.append(" owned by \"");
- sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
- }
- sb.append(')');
- } else if (className.equals("java.lang.Thread") && method.equals("join")) {
- sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(')');
- } else {
- sb.append(" (parking for lock");
- if (info.getLockOwnerName() != null) {
- sb.append(" owned by \"");
- sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
- }
- sb.append(')');
- }
- break;
- }
- case TIMED_WAITING: {
- final StackTraceElement element = info.getStackTrace()[0];
- final String className = element.getClassName();
- final String method = element.getMethodName();
- if (className.equals("java.lang.Object") && method.equals("wait")) {
- sb.append(" (on object monitor");
- if (info.getLockOwnerName() != null) {
- sb.append(" owned by \"");
- sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
- }
- sb.append(')');
- } else if (className.equals("java.lang.Thread") && method.equals("sleep")) {
- sb.append(" (sleeping)");
- } else if (className.equals("java.lang.Thread") && method.equals("join")) {
- sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(')');
- } else {
- sb.append(" (parking for lock");
- if (info.getLockOwnerName() != null) {
- sb.append(" owned by \"");
- sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
- }
- sb.append(')');
- }
- break;
- }
- default:
- break;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/98eaaf98/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInformation.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInformation.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInformation.java
new file mode 100644
index 0000000..af7bf8b
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/message/ExtendedThreadInformation.java
@@ -0,0 +1,167 @@
+/*
+ * 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.LockInfo;
+import java.lang.management.MonitorInfo;
+import java.lang.management.ThreadInfo;
+
+import org.apache.logging.log4j.message.ThreadInformation;
+import org.apache.logging.log4j.util.StringBuilders;
+
+/**
+ * Provides information on locks and monitors in the thread dump. This class requires Java 1.6 to compile and
+ * run.
+ */
+class ExtendedThreadInformation implements ThreadInformation {
+
+ private final ThreadInfo threadInfo;
+
+ ExtendedThreadInformation(final ThreadInfo thread) {
+ this.threadInfo = thread;
+ }
+
+ @Override
+ public void printThreadInfo(final StringBuilder sb) {
+ StringBuilders.appendDqValue(sb, threadInfo.getThreadName());
+ sb.append(" Id=").append(threadInfo.getThreadId()).append(' ');
+ formatState(sb, threadInfo);
+ if (threadInfo.isSuspended()) {
+ sb.append(" (suspended)");
+ }
+ if (threadInfo.isInNative()) {
+ sb.append(" (in native)");
+ }
+ sb.append('\n');
+ }
+
+ @Override
+ public void printStack(final StringBuilder sb, final StackTraceElement[] stack) {
+ int i = 0;
+ for (final StackTraceElement element : stack) {
+ sb.append("\tat ").append(element.toString());
+ sb.append('\n');
+ if (i == 0 && threadInfo.getLockInfo() != null) {
+ final Thread.State ts = threadInfo.getThreadState();
+ switch (ts) {
+ case BLOCKED:
+ sb.append("\t- blocked on ");
+ formatLock(sb, threadInfo.getLockInfo());
+ sb.append('\n');
+ break;
+ case WAITING:
+ sb.append("\t- waiting on ");
+ formatLock(sb, threadInfo.getLockInfo());
+ sb.append('\n');
+ break;
+ case TIMED_WAITING:
+ sb.append("\t- waiting on ");
+ formatLock(sb, threadInfo.getLockInfo());
+ sb.append('\n');
+ break;
+ default:
+ }
+ }
+
+ for (final MonitorInfo mi : threadInfo.getLockedMonitors()) {
+ if (mi.getLockedStackDepth() == i) {
+ sb.append("\t- locked ");
+ formatLock(sb, mi);
+ sb.append('\n');
+ }
+ }
+ ++i;
+ }
+
+ final LockInfo[] locks = threadInfo.getLockedSynchronizers();
+ if (locks.length > 0) {
+ sb.append("\n\tNumber of locked synchronizers = ").append(locks.length).append('\n');
+ for (final LockInfo li : locks) {
+ sb.append("\t- ");
+ formatLock(sb, li);
+ sb.append('\n');
+ }
+ }
+ }
+
+ private void formatLock(final StringBuilder sb, final LockInfo lock) {
+ sb.append('<').append(lock.getIdentityHashCode()).append("> (a ");
+ sb.append(lock.getClassName()).append(')');
+ }
+
+ private void formatState(final StringBuilder sb, final ThreadInfo info) {
+ final Thread.State state = info.getThreadState();
+ sb.append(state);
+ switch (state) {
+ case BLOCKED: {
+ sb.append(" (on object monitor owned by \"");
+ sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId()).append(')');
+ break;
+ }
+ case WAITING: {
+ final StackTraceElement element = info.getStackTrace()[0];
+ final String className = element.getClassName();
+ final String method = element.getMethodName();
+ if (className.equals("java.lang.Object") && method.equals("wait")) {
+ sb.append(" (on object monitor");
+ if (info.getLockOwnerName() != null) {
+ sb.append(" owned by \"");
+ sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
+ }
+ sb.append(')');
+ } else if (className.equals("java.lang.Thread") && method.equals("join")) {
+ sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(')');
+ } else {
+ sb.append(" (parking for lock");
+ if (info.getLockOwnerName() != null) {
+ sb.append(" owned by \"");
+ sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
+ }
+ sb.append(')');
+ }
+ break;
+ }
+ case TIMED_WAITING: {
+ final StackTraceElement element = info.getStackTrace()[0];
+ final String className = element.getClassName();
+ final String method = element.getMethodName();
+ if (className.equals("java.lang.Object") && method.equals("wait")) {
+ sb.append(" (on object monitor");
+ if (info.getLockOwnerName() != null) {
+ sb.append(" owned by \"");
+ sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
+ }
+ sb.append(')');
+ } else if (className.equals("java.lang.Thread") && method.equals("sleep")) {
+ sb.append(" (sleeping)");
+ } else if (className.equals("java.lang.Thread") && method.equals("join")) {
+ sb.append(" (on completion of thread ").append(info.getLockOwnerId()).append(')');
+ } else {
+ sb.append(" (parking for lock");
+ if (info.getLockOwnerName() != null) {
+ sb.append(" owned by \"");
+ sb.append(info.getLockOwnerName()).append("\" Id=").append(info.getLockOwnerId());
+ }
+ sb.append(')');
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}