Java 为什么Eclipse控制台中的某些输出是红色的?
我在Eclipse中有不同颜色的控制台输出:红色和黑色 在这种情况下,颜色是什么意思Java 为什么Eclipse控制台中的某些输出是红色的?,java,eclipse,logging,Java,Eclipse,Logging,我在Eclipse中有不同颜色的控制台输出:红色和黑色 在这种情况下,颜色是什么意思 区别在于System.out v。System.err如果控制台首选项设置是标准设置(换句话说,您没有做任何更改),则红色表示错误 黑色是标准的输出文本颜色 此首选项控制写入标准的文本的颜色 应用程序的输出流 红色是标准错误文本颜色 此首选项控制写入标准的文本的颜色 应用程序的错误流 这是一个老问题,但我已经解决了,下面是我的答案 问题是Eclipse总是以相同的颜色显示stderr输出(在本例中为红色)。它在
区别在于System.out v。System.err如果控制台首选项设置是标准设置(换句话说,您没有做任何更改),则红色表示错误 黑色是标准的输出文本颜色 此首选项控制写入标准的文本的颜色 应用程序的输出流 红色是标准错误文本颜色 此首选项控制写入标准的文本的颜色 应用程序的错误流
这是一个老问题,但我已经解决了,下面是我的答案 问题是Eclipse总是以相同的颜色显示stderr输出(在本例中为红色)。它在设置中是可配置的,但对于所有stderr流,它总是相同的 我的解决方案是为控制台处理程序使用自定义格式化程序,并根据消息级别在每条消息之前插入ANSI颜色代码。因此,我是基于JDK8中原始的
SimpleFormatter.java
。代码如下:
导入java.io.PrintWriter;
导入java.io.StringWriter;
导入java.util.Date;
导入java.util.logging.Formatter;
导入java.util.logging.LogRecord;
公共类CustomFormatter扩展格式化程序{
公共静态最终字符串ANSI_RESET=“\u001B[0m”;
公共静态最终字符串ANSI_RED=“\u001B[31m”;
公共静态最终字符串ANSI_YELLOW=“\u001B[33m”;
公共静态最终字符串ANSI_CYAN=“\u001B[36m”;
私人最终日期dat=新日期();
私有静态最终字符串格式=“%1$s%2$tb%2$td,%2$tY%2$tl:%2$tM:%2$tS%2$Tp%3$s%n%5$s:%6$s%7$s%n”;
@凌驾
公共字符串格式(日志记录){
dat.setTime(record.getMillis());
字符串源;
if(record.getSourceClassName()!=null){
source=record.getSourceClassName();
if(record.getSourceMethodName()!=null){
source+=“”+记录。getSourceMethodName();
}
}否则{
source=record.getLoggerName();
}
字符串消息=格式化消息(记录);
字符串throwable=“”;
if(record.getThrown()!=null){
StringWriter sw=新的StringWriter();
PrintWriter pw=新的PrintWriter(sw);
println();
record.getThrown().printStackTrace(pw);
关闭();
throwable=sw.toString();
}
开关(record.getLevel().toString()){
案例“信息”:
返回String.format(格式,ANSI_青色,dat,source,record.getLoggerName(),
record.getLevel().getLocalizedName(),message+ANSI_RESET,可丢弃);
案例“警告”:
返回String.format(格式,ANSI_YELLOW,dat,source,record.getLoggerName(),
record.getLevel().getLocalizedName(),message+ANSI_RESET,可丢弃);
“严重”病例:
返回String.format(格式,ANSI_RED,dat,source,record.getLoggerName(),
record.getLevel().getLocalizedName(),message+ANSI_RESET,可丢弃);
违约:
返回String.format(format,dat,source,record.getLoggerName(),
record.getLevel().getLocalizedName(),消息,可丢弃);
}
}
}
先决条件
- 对于Eclipse,您将需要它,以便Eclipse控制台能够解释ANSI转义码。安装它并重新启动Eclipse
- 上面的代码编译并压缩成.jar文件:
- 将上述代码另存为
CustomFormatter.java
- 使用
javaccustomformatter.java编译它
- 使用
创建一个包含类文件的JAR文件,并将其保存在所需的任何文件夹中(例如,在JAR cfv CustomFormatter.JAR CustomFormatter.Class
中)C:\java\CustomFormatter
- 转到
并选中窗口-->首选项-->Ansi控制台
,然后尝试对stderr输出使用标准错误颜色设置
应用并关闭
- 编辑
文件,该文件位于JRE的logging.properties
文件夹中。您的计算机中可能有多个文件,您应该编辑与Eclipse正在使用的JRE版本相对应的文件。您可以通过阅读“控制台”下面的内容来知道正在使用哪一个文件Eclipse中的选项卡:lib
- 用文本编辑器打开
。在我的例子中,我将编辑logging.properties
C:\ProgramFiles\Java\jre1.8.0\u 231\lib\logging.properties
- 您应该更改
值(在我的示例中是第44行),使其等于java.util.logging.ConsoleHandler.formatter
,与此完全相同:CustomFormatter
。请确保保存更改java.util.logging.ConsoleHandler.formatter=CustomFormatter
- 用文本编辑器打开
- 添加
作为Eclipse中的JRE系统库CustomFormatter.jar
- 转到
窗口-->首选项-->Java-->安装的JRE
- 选择您正在使用的JRE,单击
和Edit
添加外部JAR…
- 转到您保存的文件夹
,然后选择它CustomFormatter.jar
- 确保它位于系统库列表中,然后单击
和Finish
Apply并关闭
- 就是这样。您现在应该为每个记录器级别使用不同的颜色。青色表示信息,黄色表示警告,红色表示严重。您可以通过修改上面的代码将其更改为任何颜色。它适用于java 8和Eclipse 2019-12: