如何解决更改终端中不同流的输出颜色
首先澄清一下,我不是在谈论在某些 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);
}
}
但是在 do something 方法中,当我打印到 System.err 时它是红色的,但 System.out 也变成红色!
如何解决这个问题?
注意:请不要建议在我打印到 System.err 的所有内容之前和之后打印 ANSI_RED 和 ANSI_RESET 我知道这是一个解决方案,但是打印件丢失,因此很难做到,这将是我的如果没有其他可能的方法,最后一个选择!
解决方法
因此,正如评论中所建议的,我创建了一个扩展 PrintStream 并覆盖 print and
println` 方法的类。
我的 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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。