答案 0 :(得分:6)
如果控制台偏好设置是标准设置(换句话说,您没有进行任何更改),则红色表示错误
黑色是标准输出文字颜色
此首选项控制写入标准的文本的颜色 应用程序输出流。
红色是标准错误文本颜色
此首选项控制写入标准的文本的颜色 应用程序的错误流。
答案 1 :(得分:3)
区别在于System.out v.System.err
答案 2 :(得分:2)
这是一个老问题,但是我解决了,所以这是我的答案。
问题是Eclipse总是以相同的颜色(在这种情况下为红色)显示stderr输出。它可以在设置中进行配置,但对于所有stderr流,它始终是相同的。
我的解决方案是为控制台处理程序使用自定义格式程序,并根据每条消息的级别在每条消息之前注入ANSI颜色代码。因此,我基于JDK8中的原始SimpleFormatter.java
做到了这一点。这是代码:
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
public class CustomFormatter extends Formatter {
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_CYAN = "\u001B[36m";
private final Date dat = new Date();
private static final String format = "%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";
@Override
public String format(LogRecord record) {
dat.setTime(record.getMillis());
String source;
if (record.getSourceClassName() != null) {
source = record.getSourceClassName();
if (record.getSourceMethodName() != null) {
source += " " + record.getSourceMethodName();
}
} else {
source = record.getLoggerName();
}
String message = formatMessage(record);
String throwable = "";
if (record.getThrown() != null) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.println();
record.getThrown().printStackTrace(pw);
pw.close();
throwable = sw.toString();
}
switch (record.getLevel().toString()) {
case "INFO":
return String.format(format, ANSI_CYAN, dat, source, record.getLoggerName(),
record.getLevel().getLocalizedName(), message + ANSI_RESET, throwable);
case "WARNING":
return String.format(format, ANSI_YELLOW, dat, source, record.getLoggerName(),
record.getLevel().getLocalizedName(), message + ANSI_RESET, throwable);
case "SEVERE":
return String.format(format, ANSI_RED, dat, source, record.getLoggerName(),
record.getLevel().getLocalizedName(), message + ANSI_RESET, throwable);
default:
return String.format(format, dat, source, record.getLoggerName(),
record.getLevel().getLocalizedName(), message, throwable);
}
}
}
ANSI Escape in Console plugin(用于Eclipse)。您将需要使用它,以便Eclipse控制台可以解释ANSI Escape代码。 安装并重新启动Eclipse 。
上面的代码已编译并压缩为 .jar文件:
CustomFormatter.java
javac CustomFormatter.java
jar cfv CustomFormatter.jar CustomFormatter.class
创建一个包含类文件的JAR文件,并将其保存在所需的任何文件夹中(例如,在C:\java\CustomFormatter
中)Window --> Preferences --> Ansi Console
并选中Try using the standard error color setting for stderr output
,然后选择Apply and Close
。 编辑logging.properties
文件,该文件位于JRE的lib
文件夹中。您的计算机中可能有多个,您应编辑与Eclipse使用的JRE版本相对应的一个。通过阅读Eclipse中“控制台”选项卡下面的信息,您可以知道正在使用哪个:
logging.properties
。就我而言,我将编辑C:\Program Files\Java\jre1.8.0_231\lib\logging.properties
。 java.util.logging.ConsoleHandler.formatter
的值(在我的情况下是第44行),使其等于CustomFormatter
,完全像这样:java.util.logging.ConsoleHandler.formatter = CustomFormatter
。确保保存更改。 将CustomFormatter.jar
添加为Eclipse中的JRE系统库。
Window --> Preferences --> Java --> Installed JREs
Edit
和Add External JARs...
CustomFormatter.jar
的文件夹并选择它。Finish
和Apply and Close
就是这样。您现在应该为每个Logger级别使用不同的颜色。 INFO为青色,WARNING为黄色,SEVERE为红色。您可以使用corresponding ANSI Color code修改上面的代码,将其更改为所需的颜色。它适用于Java 8和Eclipse 2019-12:
注意::如果正常的标准输出文本显示为蓝色,红色或黄色,请尝试禁用Limit console output
中的Window --> Preferences --> Run/Debug --> Console