如何以不同的颜色打印异常

时间:2016-03-26 13:52:08

标签: java exception

java中是否有任何方法可以打印不同颜色的整个异常消息(包括所有堆栈跟踪)(例如红色)。原因是,我想以某种不同的方式展示致命错误/异常。如果异常消息也以与一般日志打印相同的方式打印,则难以跟踪与日志比较的实际异常。

请建议如何做到这一点。 有什么不同的方式,请建议

此致

2 个答案:

答案 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();
        }
    }