更改终端中不同流的输出颜色



首先要澄清的是,我说的不是改变某些ide的附加端子的颜色,而是普通端子的颜色。

第二个问题:

我有两个输出流,都打印到system.out和system.err,但我希望system.err的输出流打印成红色,但代码只接受一个流并调用print,它太大了,无法单独更改所有行,所以有没有办法让system.err的所有输出都是红色的,system.out将是正常的

我尝试在System.err的代码段之前添加ANSI RED转义代码,但随后out也打印出红色。我怎么能只有err作为红色输出呢!

我现在的代码:

public class Main {
public static final String ANSI_RED = "u001B[31m";
public static final String ANSI_RESET = "33[0m";
public static void main(String[] args) {
System.err.print(ANSI_RED);        
doSomePrinting(System.out, System.err); // This is some method which prints both to System.out and System.err
System.err.print(ANSI_RESET);        
}
}

但是在do something方法内部,当我打印到System.err时,它是红色的,但System.out也变为红色!

如何解决这个问题?

注意:请不要建议在我打印到System.err之前和之后打印ANSI_RED和ANSI_RESET。我知道这是一个解决方案,但打印丢失,因此很难做到这一点,如果没有其他可能的方法,这将是我的最后选择!

因此,正如注释中所建议的,我创建了一个扩展PrintStream并覆盖print andprintln`方法的类。

我的PrintStream类:

public class ErrorStreamPrinter extends PrintStream {
public ErrorStreamPrinter(OutputStream out) {
super(out, true);
}
@Override
public void print(String s) {
super.print(Constants.ANSI_RED);
super.print(s);
super.print(Constants.ANSI_RESET);
}
@Override
public void println(String s) {
super.print(Constants.ANSI_RED);
super.print(s);
super.println(Constants.ANSI_RESET);
}
}

最新更新