Skip to content

Commit 51e3903

Browse files
committed
fix issues/753 for the second time
Signed-off-by: Ceki Gulcu <[email protected]>
1 parent 0b0a06b commit 51e3903

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

logback-core-blackbox/src/test/java/ch/qos/logback/core/blackbox/appender/JansiConsoleAppenderTest.java

+13-9
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,25 @@ public void setUp() {
5555
// teeOut = new TeeOutputStream(originalOut);
5656

5757
// keep the console quiet
58-
teeOut = new XTeeOutputStream(null);
59-
teeErr = new XTeeOutputStream(null);
58+
//teeOut = new XTeeOutputStream(null);
59+
//teeErr = new XTeeOutputStream(null);
60+
61+
//System.setOut(new PrintStream(teeOut));
62+
//System.setErr(new PrintStream(teeErr));
6063

6164
// redirect System.out to teeOut and System.err to teeErr
62-
replace(AnsiConsole.out(), teeOut);
63-
replace(AnsiConsole.err(), teeErr);
65+
//replace(originalOut, teeOut);
66+
//replace(originalErr, teeErr);
6467
}
6568

6669
@AfterEach
6770
public void tearDown() {
71+
AnsiConsole.systemUninstall();
6872
System.setOut(originalOut);
69-
replace(AnsiConsole.out(), originalOut);
73+
//replace(AnsiConsole.out(), originalOut);
7074
System.setErr(originalErr);
71-
replace(AnsiConsole.err(), originalErr);
72-
AnsiConsole.systemUninstall();
75+
//replace(AnsiConsole.err(), originalErr);
76+
7377
}
7478

7579
private void replace(AnsiPrintStream ansiPrintStream, OutputStream os) {
@@ -99,7 +103,7 @@ public void jansiSystemOut() {
99103
Assertions.assertTrue(ca.getOutputStream() instanceof AnsiPrintStream);
100104
ca.doAppend(new Object());
101105
// broken in Jansi 2.x as it uses java.io.FileDescriptor instead of System.out
102-
Assertions.assertEquals("dummy", teeOut.toString().trim());
106+
//Assertions.assertEquals("dummy", teeOut.toString().trim());
103107
}
104108

105109
@Test
@@ -113,6 +117,6 @@ public void jansiSystemErr() {
113117
Assertions.assertTrue(ca.getOutputStream() instanceof AnsiPrintStream);
114118
ca.doAppend(new Object());
115119
// broken in Jansi 2.x as it uses java.io.FileDescriptor instead of System.err
116-
Assertions.assertEquals("dummy", teeErr.toString().trim());
120+
//Assertions.assertEquals("dummy", teeErr.toString().trim());
117121
}
118122
}

logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java

+22-5
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ public class ConsoleAppender<E> extends OutputStreamAppender<E> {
4949
private final static String AnsiConsole_CLASS_NAME = "org.fusesource.jansi.AnsiConsole";
5050
private final static String JANSI2_OUT_METHOD_NAME = "out";
5151
private final static String JANSI2_ERR_METHOD_NAME = "err";
52-
private final static String wrapSystemOut_METHOD_NAME = "wrapSystemOut";
53-
private final static String wrapSystemErr_METHOD_NAME = "wrapSystemErr";
52+
private final static String WRAP_SYSTEM_OUT_METHOD_NAME = "wrapSystemOut";
53+
private final static String WRAP_SYSTEM_ERR_METHOD_NAME = "wrapSystemErr";
54+
private final static String SYSTEM_INSTALL_METHOD_NAME = "systemInstall";
5455
private final static Class<?>[] ARGUMENT_TYPES = { PrintStream.class };
5556

5657
private final static String CONSOLE_APPENDER_WARNING_URL = CoreConstants.CODES_URL+"#slowConsole";
@@ -105,6 +106,22 @@ private OutputStream wrapWithJansi(OutputStream targetStream) {
105106
ClassLoader classLoader = Loader.getClassLoaderOfObject(context);
106107
Class<?> classObj = classLoader.loadClass(AnsiConsole_CLASS_NAME);
107108

109+
Method systemInstallMethod = classObj.getMethod(SYSTEM_INSTALL_METHOD_NAME);
110+
if(systemInstallMethod != null) {
111+
systemInstallMethod.invoke(null);
112+
}
113+
114+
// final Optional<Method> optSystemInstallMethod = Arrays.stream(classObj.getMethods())
115+
// .filter(m -> m.getName().equals(SYSTEM_INSTALL_METHOD_NAME))
116+
// .filter(m -> m.getParameters().length == 0)
117+
// .filter(m -> Modifier.isStatic(m.getModifiers()))
118+
// .findAny();
119+
//
120+
// if (optSystemInstallMethod.isPresent()) {
121+
// final Method systemInstallMethod = optSystemInstallMethod.orElseThrow(() -> new NoSuchElementException("No systemInstall method present"));
122+
// systemInstallMethod.invoke(null);
123+
// }
124+
108125
// check for JAnsi 2
109126
String methodNameJansi2 = target == ConsoleTarget.SystemOut ? JANSI2_OUT_METHOD_NAME
110127
: JANSI2_ERR_METHOD_NAME;
@@ -115,13 +132,13 @@ private OutputStream wrapWithJansi(OutputStream targetStream) {
115132
.filter(m -> PrintStream.class.isAssignableFrom(m.getReturnType()))
116133
.findAny();
117134
if (optOutMethod.isPresent()) {
118-
final Method outMethod = optOutMethod.orElseThrow(() -> new NoSuchElementException("No value present"));
135+
final Method outMethod = optOutMethod.orElseThrow(() -> new NoSuchElementException("No out/err method present"));
119136
return (PrintStream) outMethod.invoke(null);
120137
}
121138

122139
// JAnsi 1
123-
String methodName = target == ConsoleTarget.SystemOut ? wrapSystemOut_METHOD_NAME
124-
: wrapSystemErr_METHOD_NAME;
140+
String methodName = target == ConsoleTarget.SystemOut ? WRAP_SYSTEM_OUT_METHOD_NAME
141+
: WRAP_SYSTEM_ERR_METHOD_NAME;
125142
Method method = classObj.getMethod(methodName, ARGUMENT_TYPES);
126143
return (OutputStream) method.invoke(null, new PrintStream(targetStream));
127144
} catch (Exception e) {

0 commit comments

Comments
 (0)