You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2015/04/20 05:32:44 UTC

logging-log4j2 git commit: [LOG4J2-965] System.out no longer works after the Console appender and JANSI is initialized.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 0663a96a0 -> c958fbaf2


[LOG4J2-965] System.out no longer works after the Console appender and
JANSI is initialized.

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

Branch: refs/heads/master
Commit: c958fbaf2988a42fa6d09ffa22f9c974ce33f019
Parents: 0663a96
Author: Gary Gregory <ga...@gmail.com>
Authored: Sun Apr 19 20:32:41 2015 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Sun Apr 19 20:32:41 2015 -0700

----------------------------------------------------------------------
 .../log4j/core/appender/ConsoleAppender.java    | 40 +++++++++++++++++++-
 src/changes/changes.xml                         |  3 ++
 2 files changed, 42 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c958fbaf/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
index fc062d8..f98a61c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/ConsoleAppender.java
@@ -197,7 +197,7 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
             // We type the parameter as a wildcard to avoid a hard reference to Jansi.
             final Class<?> clazz = Loader.loadClass(JANSI_CLASS);
             final Constructor<?> constructor = clazz.getConstructor(OutputStream.class);
-            return (OutputStream) constructor.newInstance(printStream);
+            return new CloseShieldOutputStream((OutputStream) constructor.newInstance(printStream));
         } catch (final ClassNotFoundException cnfe) {
             LOGGER.debug("Jansi is not installed, cannot find {}", JANSI_CLASS);
         } catch (final NoSuchMethodException nsme) {
@@ -209,6 +209,44 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
     }
 
     /**
+     * A delegating OutputStream that does not close its delegate.
+     */
+    private static class CloseShieldOutputStream extends OutputStream {
+
+        private final OutputStream delegate;
+
+        public CloseShieldOutputStream(final OutputStream delegate) {
+            this.delegate = delegate;
+        }
+
+        @Override
+        public void close() {
+            // do not close delegate
+        }
+
+        @Override
+        public void flush() throws IOException {
+            delegate.flush();
+        }
+
+        @Override
+        public void write(final byte[] b) throws IOException {
+            delegate.write(b);
+        }
+
+        @Override
+        public void write(final byte[] b, final int off, final int len)
+                throws IOException {
+            delegate.write(b, off, len);
+        }
+
+        @Override
+        public void write(final int b) throws IOException {
+            delegate.write(b);
+        }
+    }
+
+    /**
      * An implementation of OutputStream that redirects to the current System.err.
      */
     private static class SystemErrStream extends OutputStream {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c958fbaf/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index aeda6e3..09c37c4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.3" date="2015-0?-??" description="GA Release 2.3">
+      <action issue="LOG4J2-965" dev="ggregory" type="fix" due-to="Khotyn Huang">
+        System.out no longer works after the Console appender and JANSI is initialized.
+      </action>
       <action issue="LOG4J2-995" dev="rgoers" type="update">
         Move UTF-8 constant from Charsets to Constants class. Remove Charsets class.
       </action>