Use ConsoleListener which now exposes simpler means to extend and wrap the stream used. Update docs.
Project: http://git-wip-us.apache.org/repos/asf/maven/repo Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/957b32e1 Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/957b32e1 Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/957b32e1 Branch: refs/heads/slf4j-gossip Commit: 957b32e1fad593ff5641ab2f1e9c52f67596a310 Parents: 8cb186a Author: Jason Dillon <ja...@planet57.com> Authored: Tue May 24 14:06:52 2016 -0700 Committer: Hervé Boutemy <hbout...@apache.org> Committed: Thu Jun 2 23:41:45 2016 +0200 ---------------------------------------------------------------------- .../impl/gossip/ColorConsoleListener.java | 47 +++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven/blob/957b32e1/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/gossip/ColorConsoleListener.java ---------------------------------------------------------------------- diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/gossip/ColorConsoleListener.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/gossip/ColorConsoleListener.java index da8a7ed..b9c97a9 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/gossip/ColorConsoleListener.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/gossip/ColorConsoleListener.java @@ -21,10 +21,9 @@ package org.apache.maven.cli.logging.impl.gossip; import java.io.PrintStream; +import com.planet57.gossip.listener.ConsoleListener; import org.fusesource.jansi.AnsiConsole; - -import com.planet57.gossip.Event; -import com.planet57.gossip.listener.ListenerSupport; +import org.fusesource.jansi.internal.CLibrary; /** * Specialized {@link com.planet57.gossip.listener.Listener} which is aware of ANSI streams. @@ -33,35 +32,41 @@ import com.planet57.gossip.listener.ListenerSupport; * @since 3.4.0 */ public class ColorConsoleListener - extends ListenerSupport + extends ConsoleListener { private PrintStream out; - private PrintStream getOut() + /** + * Returns file descriptor identifier for the configured stream. + */ + private int getFileno() { - if ( out == null ) + switch ( getStream() ) { - // wrapping has logic which can detect, to some limited degree, if ansi is supported and strip if needed - out = new PrintStream( AnsiConsole.wrapOutputStream( System.out ) ); + case OUT: + return CLibrary.STDOUT_FILENO; + + case ERR: + return CLibrary.STDERR_FILENO; + + default: + throw new InternalError(); } - return out; } + /** + * Returns an ANSI aware wrapped stream. + * + * Needed so that jansi (limited) logic to detect supported streams is applied and copes with + * redirection of stream to file to strip out ANSI sequences. + */ @Override - public void onEvent( final Event event ) throws Exception + protected PrintStream getOut() { - assert event != null; - - if ( !isLoggable( event ) ) - { - return; - } - - PrintStream out = getOut(); - synchronized ( out ) + if ( out == null ) { - out.print( render( event ) ); - out.flush(); + out = new PrintStream( AnsiConsole.wrapOutputStream( super.getOut(), getFileno() ) ); } + return out; } }