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