【发布时间】:2021-04-12 07:45:40
【问题描述】:
首先要澄清的是,我不是在谈论改变某些 ide 附加终端的颜色,而是在普通终端。
其次是我的问题:
我有 2 个输出流,都打印到 system.out 和 system.err,但我希望 system.err 一个以红色打印,但代码只需要一个流并调用 print,而且它太大而无法单独更改所有行那么有没有办法让 System.err 的所有输出都是红色的,而 System.out 是正常的
我尝试在 System.err 的代码段之前添加 ANSI RED 转义码,但随后输出也显示为红色,我怎么能只将 err 作为红色输出!
我现在的代码:
public class Main {
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_RESET = "\033[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);
}
}
但是当我打印到 System.err 时,在 do something 方法中它是红色的,但 System.out 也变成了红色!
如何解决这个问题?
注意:请不要建议在我打印到 System.err 之前和之后打印 ANSI_RED 和 ANSI_RESET 我知道这是一个解决方案,但是会丢失打印件,因此很难做到,这将是我的如果没有其他可能的方法,最后一个选择!
【问题讨论】:
-
您可以使用 System.setErr() 将 System.err 替换为您自己的 PrintStream。在您自己的 PrintStream 中,您可以在每行输出的开头和结尾附加 ANSI_RED 和 ANSI_RESET。
-
@Alex 是的,我想我会覆盖打印方法
标签: java printing terminal ansi