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/29 08:30:43 UTC
logging-log4j2 git commit: [LOG4J2-965] System.out no longer works
after the Console appender and JANSI are initialized.
Repository: logging-log4j2
Updated Branches:
refs/heads/master 15df0f056 -> d04659cde
[LOG4J2-965] System.out no longer works after the Console appender and
JANSI are 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/d04659cd
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/d04659cd
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/d04659cd
Branch: refs/heads/master
Commit: d04659cde3f58521cb8c114ab5032b19a4644cc5
Parents: 15df0f0
Author: Gary Gregory <ga...@gmail.com>
Authored: Tue Apr 28 23:30:34 2015 -0700
Committer: Gary Gregory <ga...@gmail.com>
Committed: Tue Apr 28 23:30:34 2015 -0700
----------------------------------------------------------------------
.../log4j/core/appender/ConsoleAppender.java | 13 +++--
.../core/appender/ConsoleAppenderTest.java | 51 ++++++++++++++------
src/changes/changes.xml | 3 ++
3 files changed, 44 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d04659cd/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 a652a1e..81a1152 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
@@ -181,28 +181,27 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
private static OutputStream getOutputStream(final boolean follow, final Target target) {
final String enc = Charset.defaultCharset().name();
- PrintStream printStream = null;
+ OutputStream outputStream = null;
try {
- // Cannot use a CloseShieldOutputStream here;
- // see org.apache.logging.log4j.core.appender.ConsoleAppenderTest
// @formatter:off
- printStream = target == Target.SYSTEM_OUT ?
+ outputStream = target == Target.SYSTEM_OUT ?
follow ? new PrintStream(new SystemOutStream(), true, enc) : System.out :
follow ? new PrintStream(new SystemErrStream(), true, enc) : System.err;
// @formatter:on
+ outputStream = new CloseShieldOutputStream(outputStream);
} catch (final UnsupportedEncodingException ex) { // should never happen
throw new IllegalStateException("Unsupported default encoding " + enc, ex);
}
final PropertiesUtil propsUtil = PropertiesUtil.getProperties();
if (!propsUtil.getStringProperty("os.name").startsWith("Windows")
|| propsUtil.getBooleanProperty("log4j.skipJansi")) {
- return printStream;
+ return outputStream;
}
try {
// 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(outputStream));
} catch (final ClassNotFoundException cnfe) {
LOGGER.debug("Jansi is not installed, cannot find {}", JANSI_CLASS);
} catch (final NoSuchMethodException nsme) {
@@ -210,7 +209,7 @@ public final class ConsoleAppender extends AbstractOutputStreamAppender<OutputSt
} catch (final Exception ex) {
LOGGER.warn("Unable to instantiate {}", JANSI_CLASS);
}
- return printStream;
+ return outputStream;
}
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d04659cd/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 0b480eb..d190a7a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -38,7 +38,6 @@ import org.easymock.EasyMockSupport;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -57,8 +56,8 @@ public class ConsoleAppenderTest {
public static void beforeClass() {
System.setProperty(LOG4J_SKIP_JANSI, "true");
}
-
- private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ ByteArrayOutputStream baos;
EasyMockSupport mocks;
@@ -69,16 +68,35 @@ public class ConsoleAppenderTest {
System.setProperty(LOG4J_SKIP_JANSI, "true");
mocks = new EasyMockSupport();
psMock = mocks.createMock("psMock", PrintStream.class);
+ baos = new ByteArrayOutputStream();
+ }
+
+ private enum SystemSetter {
+ SYSTEM_OUT {
+ @Override
+ void systemSet(final PrintStream printStream) {
+ System.setOut(printStream);
+ }
+ },
+ SYSTEM_ERR {
+ @Override
+ void systemSet(final PrintStream printStream) {
+ System.setErr(printStream);
+ }
+ },
+ ;
+ abstract void systemSet(PrintStream printStream);
}
- private void testConsoleStreamManagerDoesNotClose(PrintStream ps, String targetName) {
+ private void testConsoleStreamManagerDoesNotClose(PrintStream ps, String targetName, SystemSetter systemSetter) {
try {
psMock.write((byte[]) anyObject(), anyInt(), anyInt());
expectLastCall().anyTimes();
psMock.flush();
+ expectLastCall().anyTimes();
mocks.replayAll();
- System.setOut(psMock);
+ systemSetter.systemSet(psMock);
final Layout<String> layout = PatternLayout.createLayout(null, null, null, null, false, false, null, null);
final ConsoleAppender app = ConsoleAppender.createAppender(layout, null, targetName, "Console", "false",
"false");
@@ -92,23 +110,22 @@ public class ConsoleAppenderTest {
app.stop();
assertFalse("Appender did not stop", app.isStarted());
} finally {
- System.setOut(ps);
+ systemSetter.systemSet(ps);
}
mocks.verifyAll();
}
@Test
- @Ignore
public void testFollowSystemErr() {
- testFollowSystemPrintStream(System.err, Target.SYSTEM_ERR);
+ testFollowSystemPrintStream(System.err, Target.SYSTEM_ERR, SystemSetter.SYSTEM_ERR);
}
@Test
public void testFollowSystemOut() {
- testFollowSystemPrintStream(System.out, Target.SYSTEM_OUT);
+ testFollowSystemPrintStream(System.out, Target.SYSTEM_OUT, SystemSetter.SYSTEM_OUT);
}
- private void testFollowSystemPrintStream(PrintStream ps, Target target) {
+ private void testFollowSystemPrintStream(PrintStream ps, Target target, SystemSetter systemSetter) {
final ConsoleAppender app = ConsoleAppender.newBuilder().setTarget(target).setFollow(true)
.setIgnoreExceptions(false).build();
app.start();
@@ -117,9 +134,12 @@ public class ConsoleAppenderTest {
Level.INFO, new SimpleMessage("Test"), null);
assertTrue("Appender did not start", app.isStarted());
- System.setOut(new PrintStream(baos));
- app.append(event);
- System.setOut(ps);
+ systemSetter.systemSet(new PrintStream(baos));
+ try {
+ app.append(event);
+ } finally {
+ systemSetter.systemSet(ps);
+ }
final String msg = baos.toString();
assertNotNull("No message", msg);
assertTrue("Incorrect message: \"" + msg + "\"", msg.endsWith("Test" + Constants.LINE_SEPARATOR));
@@ -130,14 +150,13 @@ public class ConsoleAppenderTest {
}
@Test
- @Ignore
public void testSystemErrStreamManagerDoesNotClose() {
- testConsoleStreamManagerDoesNotClose(System.err, "SYSTEM_ERR");
+ testConsoleStreamManagerDoesNotClose(System.err, "SYSTEM_ERR", SystemSetter.SYSTEM_ERR);
}
@Test
public void testSystemOutStreamManagerDoesNotClose() {
- testConsoleStreamManagerDoesNotClose(System.out, "SYSTEM_OUT");
+ testConsoleStreamManagerDoesNotClose(System.out, "SYSTEM_OUT", SystemSetter.SYSTEM_OUT);
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/d04659cd/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e3cd1e6..d8a76cd 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 are initialized.
+ </action>
<action issue="LOG4J2-998" dev="ggregory" type="update" due-to="Mariano Gonzalez">
Make org.apache.logging.log4j.core.Logger#updateConfiguration protected.
</action>