更改终端中不同流的输出颜色
Change color of output for different stream in terminal
首先要澄清的是,我不是在谈论改变某些 ide 附属终端的颜色,而是在普通终端。
其次我的问题:
我有 2 个输出流都打印到 system.out 和 system.err 但我希望 system.err 一个以红色打印但是代码只需要一个流并调用 print 它是太大而无法单独更改所有行所以有没有一种方法可以使 System.err 的所有输出都是红色的,而 System.out 将是正常的
我尝试在 System.err 的代码段之前添加 ANSI RED 转义码,但随后输出也打印为红色 我怎么能只有错误作为红色输出!
我现在的代码:
public class Main {
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_RESET = "3[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);
}
}
但是 inside 当我打印到 System.err 时,do something 方法是红色的,但 System.out 也变成红色!
如何解决这个问题?
注意:请不要建议在我打印到 System.err 之前和之后打印 ANSI_RED 和 ANSI_RESET 我知道这是一个解决方案,但是打印丢失了很难做到,如果没有其他可能的话,这将是我最后的选择!
因此,正如评论中所建议的那样,我 class 扩展了 PrintStream 并覆盖了 print and
println` 方法。
我的PrintStream
class:
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);
}
}
首先要澄清的是,我不是在谈论改变某些 ide 附属终端的颜色,而是在普通终端。
其次我的问题:
我有 2 个输出流都打印到 system.out 和 system.err 但我希望 system.err 一个以红色打印但是代码只需要一个流并调用 print 它是太大而无法单独更改所有行所以有没有一种方法可以使 System.err 的所有输出都是红色的,而 System.out 将是正常的
我尝试在 System.err 的代码段之前添加 ANSI RED 转义码,但随后输出也打印为红色 我怎么能只有错误作为红色输出!
我现在的代码:
public class Main {
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_RESET = "3[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);
}
}
但是 inside 当我打印到 System.err 时,do something 方法是红色的,但 System.out 也变成红色!
如何解决这个问题?
注意:请不要建议在我打印到 System.err 之前和之后打印 ANSI_RED 和 ANSI_RESET 我知道这是一个解决方案,但是打印丢失了很难做到,如果没有其他可能的话,这将是我最后的选择!
因此,正如评论中所建议的那样,我 class 扩展了 PrintStream 并覆盖了 print and
println` 方法。
我的PrintStream
class:
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);
}
}