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

Java 如何以不同颜色打印异常,java,exception,Java,Exception,java中是否有任何方法可以用不同的颜色(例如红色)打印整个异常消息(包括所有堆栈跟踪)。原因是,我想以不同的方式展示致命错误/异常。如果异常消息的打印方式与常规日志的打印方式相同,那么与日志相比,很难跟踪实际的异常 请就如何做到这一点提出建议。 有什么不同的方法吗,那么请建议 关于建议的做法是将错误消息打印到系统.err,并将正常输出到系统.out。 现代终端应用程序通常配置为以红色显示来自stderr的文本,区别于正常输出 如果这对你来说还不够好(但我希望是这样), 然后,@Siguza建议

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

请就如何做到这一点提出建议。 有什么不同的方法吗,那么请建议


关于建议的做法是将错误消息打印到
系统.err
,并将正常输出到
系统.out
。 现代终端应用程序通常配置为以红色显示来自
stderr
的文本,区别于正常输出

如果这对你来说还不够好(但我希望是这样),
然后,@Siguza建议的另一种选择是使用ANSI颜色,如中所示。

对于不自动以红色打印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();
        }
    }


我假设所有日志消息都进入一个日志文件,然后跟踪/grep日志。是这样吗?如果是,那么根据您选择的文本编辑器,您可以创建一个语法文件来突出显示。我使用vim,创建了一个语法文件,只是为了突出显示tomcat日志。可能的重复可能只是将异常/错误日志重定向到不同的输出流。但是你是一件事。。。