Skip to content

Commit 71759c3

Browse files
jintukumardasjflomacfarla
committed
Fix colored output (hyperledger#9326)
* Fix colored output in terminal Signed-off-by: Jintu Das <[email protected]> * Update CHANGELOG Signed-off-by: Jintu Das <[email protected]> * Change logger output to out instead of err Signed-off-by: Jintu Das <[email protected]> * move changelog entry to unreleased Signed-off-by: Sally MacFarlane <[email protected]> --------- Signed-off-by: Jintu Das <[email protected]> Signed-off-by: Sally MacFarlane <[email protected]> Co-authored-by: Justin Florentine <[email protected]> Co-authored-by: Sally MacFarlane <[email protected]>
1 parent efa6b09 commit 71759c3

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
- Use Eclipse Temurin OpenJDK JRE in Besu docker image [#9392](https://github.com/hyperledger/besu/pull/9392)
2525

2626
### Bug fixes
27+
- Fix loss of colored output in terminal when using `--color-enabled=true` option [#8908](https://github.com/hyperledger/besu/issues/8908)
2728

2829
## 25.11.0
2930

app/src/main/java/org/hyperledger/besu/cli/logging/XmlExtensionConfiguration.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public Configuration reconfigure() {
6262
new XmlExtensionConfiguration(
6363
refreshedParent.getLoggerContext(),
6464
refreshedParent.getConfigurationSource().resetInputStream());
65-
createConsoleAppender();
65+
refreshed.createConsoleAppender();
6666
return refreshed;
6767
} catch (final IOException e) {
6868
LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)
@@ -90,11 +90,12 @@ private void createConsoleAppender() {
9090
return;
9191
}
9292

93+
final boolean colorEnabled = getColorEnabled();
9394
final PatternLayout patternLayout =
9495
PatternLayout.newBuilder()
9596
.withConfiguration(this)
96-
.withDisableAnsi(!BesuCommand.getColorEnabled().orElse(!noColorSet()))
97-
.withNoConsoleNoAnsi(!BesuCommand.getColorEnabled().orElse(false))
97+
.withDisableAnsi(!colorEnabled)
98+
.withNoConsoleNoAnsi(!colorEnabled)
9899
.withPattern(
99100
String.join(
100101
SEP,
@@ -105,11 +106,29 @@ private void createConsoleAppender() {
105106
colorize("%msgc%n%throwable")))
106107
.build();
107108
final ConsoleAppender consoleAppender =
108-
ConsoleAppender.newBuilder().setName("Console").setLayout(patternLayout).build();
109+
ConsoleAppender.newBuilder()
110+
.setName("Console")
111+
.setTarget(ConsoleAppender.Target.SYSTEM_OUT)
112+
.setLayout(patternLayout)
113+
.build();
109114
consoleAppender.start();
115+
116+
// Remove existing Console appender if present to avoid duplicate output
117+
if (this.getRootLogger().getAppenders().containsKey("Console")) {
118+
this.getRootLogger().removeAppender("Console");
119+
}
120+
110121
this.getRootLogger().addAppender(consoleAppender, null, null);
111122
}
112123

124+
private boolean getColorEnabled() {
125+
try {
126+
return BesuCommand.getColorEnabled().orElse(!noColorSet());
127+
} catch (NoClassDefFoundError | ExceptionInInitializerError e) {
128+
return !noColorSet();
129+
}
130+
}
131+
113132
private static boolean noColorSet() {
114133
return System.getenv("NO_COLOR") != null;
115134
}

0 commit comments

Comments
 (0)