java中是否有任何方法可以打印不同颜色的整个异常消息(包括所有堆栈跟踪)(例如红色)。原因是,我想以某种不同的方式展示致命错误/异常。如果异常消息也以与一般日志打印相同的方式打印,则难以跟踪与日志比较的实际异常。
请建议如何做到这一点。 有什么不同的方式,请建议
此致
答案 0 :(得分:2)
建议的做法是将错误消息打印到System.err
,将正常输出打印到System.out
。
现代终端应用程序通常配置为显示来自stderr
的红色文本,区别于正常输出。
如果这对你来说不够好(但我希望是这样), 然后@Siguza建议的另一种选择是使用ANSI颜色,如this other answer中所示。
答案 1 :(得分:0)
对于不自动以红色打印 stderr 的控制台,您可以创建一个扩展输出流的 java 类以添加 ANSI 颜色代码。制作一个单独的输出流类,然后用 System.setErr(new PrintStream(new ColoredOutputStream(System.err)))
设置输出,这样即使你调用 e.printStackTrace 之类的东西,它仍然是红色的。例如这就是我使用的:
public class ColoredOutputStream extends OutputStream
{
OutputStream errStream;
red = "\033[31m";
reset = "\033[0m";
public ColoredErrorStream(OutputStream outputStream){
errStream = outputStream;
}
@Override
public void write(int b) throws IOException
{
errStream.write(red.getBytes());
errStream.write(b);
errStream.write(reset.getBytes());
}
@Override
public void write(byte[] b) throws IOException
{
errStream.write(red.getBytes());
errStream.write(b);
errStream.write(reset.getBytes());
}
@Override
public void write(byte[] b, int off, int len) throws IOException
{
errStream.write(red.getBytes());
errStream.write(b, off, len);
errStream.write(reset.getBytes());
}
@Override
public void flush() throws IOException
{
errStream.flush();
}
@Override
public void close() throws IOException
{
errStream.close();
}
}