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:47 UTC

[1/8] logging-log4j2 git commit: LOG4J2-1926 make interface ThreadInformation public since some implementations will live in log4j-core

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 633bb663f -> 81f20a6ac


LOG4J2-1926 make interface ThreadInformation public since some implementations will live 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/000899ac
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/000899ac
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/000899ac

Branch: refs/heads/master
Commit: 000899acba05e5b9a2a630d59164ba055553e278
Parents: 55b9fd2
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:44:51 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:44:51 2017 +0900

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/message/ThreadInformation.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/000899ac/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.java
index 2db1777..93e6e03 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadInformation.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.message;
 /**
  * Interface used to print basic or extended thread information.
  */
-interface ThreadInformation {
+public interface ThreadInformation {
     /**
      * Format the thread information into the provided StringBuilder.
      * @param sb The StringBuilder.


[3/8] logging-log4j2 git commit: LOG4J2-1926 Remove references to java.lang.management package

Posted by rp...@apache.org.
LOG4J2-1926 Remove references to java.lang.management package

- make inner interface ThreadInfoFactory public
- obtain ThreadInfoFactory instance from ServiceLoader, fall back to BasicThreadInfoFactory
- move ExtendedThreadInfoFactory out of ThreadDumpMessage class


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

Branch: refs/heads/master
Commit: d0023dee94ecee680ee3cdc0be31313337fd49ad
Parents: a0fcb15
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:52:48 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:52:48 2017 +0900

----------------------------------------------------------------------
 .../log4j/message/ThreadDumpMessage.java        | 71 +++++++++-----------
 1 file changed, 30 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d0023dee/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
index 4cf7478..4fd1347 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ThreadDumpMessage.java
@@ -19,13 +19,13 @@ package org.apache.logging.log4j.message;
 import java.io.InvalidObjectException;
 import java.io.ObjectInputStream;
 import java.io.Serializable;
-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.Iterator;
 import java.util.Map;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
 
+import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 import org.apache.logging.log4j.util.Strings;
 
@@ -34,36 +34,20 @@ import org.apache.logging.log4j.util.Strings;
  */
 @AsynchronouslyFormattable
 public class ThreadDumpMessage implements Message, StringBuilderFormattable {
-
     private static final long serialVersionUID = -1103400781608841088L;
-
-    private static final ThreadInfoFactory FACTORY;
+    private static ThreadInfoFactory FACTORY;
 
     private volatile Map<ThreadInformation, StackTraceElement[]> threads;
-
     private final String title;
-
     private String formattedMessage;
 
-    static {
-        final Method[] methods = ThreadInfo.class.getMethods();
-        boolean basic = true;
-        for (final Method method : methods) {
-            if (method.getName().equals("getLockInfo")) {
-                basic = false;
-                break;
-            }
-        }
-        FACTORY = basic ? new BasicThreadInfoFactory() : new ExtendedThreadInfoFactory();
-    }
-
     /**
      * Generate a ThreadDumpMessage with a title.
      * @param title The title.
      */
     public ThreadDumpMessage(final String title) {
         this.title = title == null ? Strings.EMPTY : title;
-        threads = FACTORY.createThreadInfo();
+        threads = getFactory().createThreadInfo();
     }
 
     private ThreadDumpMessage(final String formattedMsg, final String title) {
@@ -71,6 +55,29 @@ public class ThreadDumpMessage implements Message, StringBuilderFormattable {
         this.title = title == null ? Strings.EMPTY : title;
     }
 
+    private static ThreadInfoFactory getFactory() {
+        if (FACTORY == null) {
+            FACTORY = initFactory(ThreadDumpMessage.class.getClassLoader());
+        }
+        return FACTORY;
+    }
+
+    private static ThreadInfoFactory initFactory(final ClassLoader classLoader) {
+        ServiceLoader<ThreadInfoFactory> serviceLoader = ServiceLoader.load(ThreadInfoFactory.class, classLoader);
+        ThreadInfoFactory result = null;
+        try {
+            Iterator<ThreadInfoFactory> iterator = serviceLoader.iterator();
+            while (result == null && iterator.hasNext()) {
+                result = iterator.next();
+            }
+        } catch (ServiceConfigurationError | LinkageError | Exception unavailable) { // if java management classes not available
+            StatusLogger.getLogger().info("ThreadDumpMessage uses BasicThreadInfoFactory: " +
+                            "could not load extended ThreadInfoFactory: {}", unavailable.toString());
+            result = null;
+        }
+        return result == null ? new BasicThreadInfoFactory() : result;
+    }
+
     @Override
     public String toString() {
         return getFormattedMessage();
@@ -162,7 +169,7 @@ public class ThreadDumpMessage implements Message, StringBuilderFormattable {
     /**
      * Factory to create Thread information.
      */
-    private interface ThreadInfoFactory {
+    public static interface ThreadInfoFactory {
         Map<ThreadInformation, StackTraceElement[]> createThreadInfo();
     }
 
@@ -183,24 +190,6 @@ public class ThreadDumpMessage implements Message, StringBuilderFormattable {
     }
 
     /**
-     * Factory to create extended thread information.
-     */
-    private static class ExtendedThreadInfoFactory implements ThreadInfoFactory {
-        @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;
-        }
-    }
-
-    /**
      * Always returns null.
      *
      * @return null


[8/8] logging-log4j2 git commit: LOG4J2-1926 change log entry

Posted by rp...@apache.org.
LOG4J2-1926 change log entry


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

Branch: refs/heads/master
Commit: 81f20a6accf14c1c0eb058d4d4c5579cbf4bdec3
Parents: e369b8a
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:57:43 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:57:43 2017 +0900

----------------------------------------------------------------------
 src/changes/changes.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/81f20a6a/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 15e469d..6b66f5d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
          - "remove" - Removed
     -->
     <release version="2.9.0" date="2017-MM-DD" description="GA Release 2.9.0">
+      <action issue="LOG4J2-1926" dev="rpopma" type="update">
+        Facilitate log4j use in Android applications: remove dependency on RMI and Management APIs from log4j-api.
+      </action>
       <action issue="LOG4J2-1699" dev="ggregory" type="add" due-to="Demetrios Dimatos, Pierrick HYMBERT">
         Configurable Log File Permissions with PosixFilePermission.
       </action>


[2/8] logging-log4j2 git commit: Merge remote-tracking branch 'origin/master'

Posted by rp...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/master
Commit: a0fcb1557f19ee22e84c32901843ed4eeab1bbc4
Parents: 000899a 633bb66
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:48:11 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:48:11 2017 +0900

----------------------------------------------------------------------
 .../logging/log4j/util/ClassNamePredicate.java  |  45 ---
 .../logging/log4j/util/ClassPredicate.java      |  46 ---
 .../apache/logging/log4j/util/StackLocator.java |  39 ---
 .../logging/log4j/util/StackLocatorUtil.java    |  70 -----
 .../log4j/util/StackWalkerStackLocator.java     |  63 ----
 log4j-api/pom.xml                               |   3 -
 .../org/apache/logging/log4j/LogManager.java    |   4 +-
 .../appender/mom/activemq/JmsAppenderIT.java    |   5 +-
 .../log4j/core/appender/FileAppender.java       |  38 ++-
 .../log4j/core/appender/FileManager.java        | 134 +++++++-
 .../core/appender/RollingFileAppender.java      |  40 ++-
 .../RollingRandomAccessFileAppender.java        |  29 +-
 .../log4j/core/appender/mom/JmsAppender.java    |  28 +-
 .../log4j/core/appender/mom/JmsManager.java     |  16 +-
 .../rolling/AbstractRolloverStrategy.java       |   6 -
 .../rolling/DefaultRolloverStrategy.java        |  25 +-
 .../rolling/DirectWriteRolloverStrategy.java    |  28 +-
 .../appender/rolling/RollingFileManager.java    |  90 ++++--
 .../rolling/RollingRandomAccessFileManager.java |  43 ++-
 .../action/PosixViewAttributeAction.java        | 307 +++++++++++++++++++
 .../PropertiesConfigurationBuilder.java         |   6 +-
 .../logging/log4j/core/net/JndiManager.java     | 293 +++++++++---------
 .../logging/log4j/core/util/FileUtils.java      |  58 ++++
 .../appender/FileAppenderPermissionsTest.java   | 211 +++++++++++++
 .../FileAppenderPermissionsXmlConfigTest.java   |  66 ++++
 .../log4j/core/appender/HttpAppenderTest.java   |  21 +-
 .../rolling/CronTriggeringPolicyTest.java       | 278 ++++++++---------
 .../rolling/OnStartupTriggeringPolicyTest.java  |   2 +-
 ...lingAppenderSizeCompressPermissionsTest.java | 107 +++++++
 .../RollingRandomAccessFileManagerTest.java     |  33 +-
 ...esConfigurationTrailingSpaceOnLevelTest.java |  67 ++++
 log4j-core/src/test/resources/log4j-posix.xml   |  14 +
 .../test/resources/log4j-rolling-gz-posix.xml   |  70 +++++
 ...roperties-trailing-space-on-level.properties |  39 +++
 pom.xml                                         |   7 +-
 src/changes/changes.xml                         |  12 +
 src/site/xdoc/manual/appenders.xml              | 177 ++++++++++-
 37 files changed, 1879 insertions(+), 641 deletions(-)
----------------------------------------------------------------------



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

Posted by rp...@apache.org.
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;
+    }
+}


[7/8] logging-log4j2 git commit: LOG4J2-1926 unit test that verifies ExtendedThreadInfoFactory is loaded from ServiceLoader

Posted by rp...@apache.org.
LOG4J2-1926 unit test that verifies ExtendedThreadInfoFactory is loaded from ServiceLoader


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

Branch: refs/heads/master
Commit: e369b8a51fe7adec9afb58a42d279d9d41a08370
Parents: 20dab46
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:57:13 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:57:13 2017 +0900

----------------------------------------------------------------------
 .../message/ExtendedThreadInformationTest.java  | 36 ++++++++++++++++++++
 1 file changed, 36 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e369b8a5/log4j-core/src/test/java/org/apache/logging/log4j/core/message/ExtendedThreadInformationTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/message/ExtendedThreadInformationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/message/ExtendedThreadInformationTest.java
new file mode 100644
index 0000000..8333f19
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/message/ExtendedThreadInformationTest.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.logging.log4j.message.ThreadDumpMessage;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests that ThreadDumpMessage uses ExtendedThreadInformation when available.
+ */
+public class ExtendedThreadInformationTest {
+    @Test
+    public void testMessage() {
+        final ThreadDumpMessage msg = new ThreadDumpMessage("Testing");
+
+        final String message = msg.getFormattedMessage();
+        //System.out.print(message);
+        assertTrue("No header", message.contains(" Id="));
+    }
+}
\ No newline at end of file


[6/8] logging-log4j2 git commit: LOG4J2-1926 added configuration file to obtain ExtendedThreadInfoFactory instance from ServiceLoader

Posted by rp...@apache.org.
LOG4J2-1926 added configuration file to obtain ExtendedThreadInfoFactory instance from ServiceLoader


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

Branch: refs/heads/master
Commit: 20dab46a8dda6c42c0a0d91085154652a2eaac1a
Parents: 98eaaf9
Author: rpopma <rp...@apache.org>
Authored: Sat Jun 24 19:56:34 2017 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Jun 24 19:56:34 2017 +0900

----------------------------------------------------------------------
 ...apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/20dab46a/log4j-core/src/main/resources/META-INF/services/org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/resources/META-INF/services/org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory b/log4j-core/src/main/resources/META-INF/services/org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
new file mode 100644
index 0000000..fad272d
--- /dev/null
+++ b/log4j-core/src/main/resources/META-INF/services/org.apache.logging.log4j.message.ThreadDumpMessage$ThreadInfoFactory
@@ -0,0 +1 @@
+org.apache.logging.log4j.core.message.ExtendedThreadInfoFactory


[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

Posted by rp...@apache.org.
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;
+        }
+    }
+}