为什么Eclipse控制台中有一些输出 - 红色?

时间:2015-10-13 15:26:57

标签: java eclipse logging

我在Eclipse中有不同颜色的控制台输出:红色和黑色。

在这种情况下,颜色意味着什么?

enter image description here

3 个答案:

答案 0 :(得分:6)

如果控制台偏好设置是标准设置(换句话说,您没有进行任何更改),则红色表示错误

黑色是标准输出文字颜色

  

此首选项控制写入标准的文本的颜色   应用程序输出流。

红色是标准错误文本颜色

  

此首选项控制写入标准的文本的颜色   应用程序的错误流。

Docs

答案 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文件

    1. 将上面的代码另存为CustomFormatter.java
    2. 使用javac CustomFormatter.java
    3. 进行编译
    4. 使用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中“控制台”选项卡下面的信息,您可以知道正在使用哪个:JRE folder

    1. 使用文本编辑器打开logging.properties。就我而言,我将编辑C:\Program Files\Java\jre1.8.0_231\lib\logging.properties
    2. 您应该更改java.util.logging.ConsoleHandler.formatter的值(在我的情况下是第44行),使其等于CustomFormatter完全像这样:java.util.logging.ConsoleHandler.formatter = CustomFormatter 。确保保存更改。
  • CustomFormatter.jar添加为Eclipse中的JRE系统库

    1. 转到Window --> Preferences --> Java --> Installed JREs
    2. 选择您正在使用的JRE,单击EditAdd External JARs...
    3. 转到保存CustomFormatter.jar的文件夹并选择它。
    4. 确保它在系统库列表中,然后单击FinishApply and Close
    5. 就是这样。您现在应该为每个Logger级别使用不同的颜色。 INFO为青色,WARNING为黄色,SEVERE为红色。您可以使用corresponding ANSI Color code修改上面的代码,将其更改为所需的颜色。它适用于Java 8和Eclipse 2019-12:

      Result

注意::如果正常的标准输出文本显示为蓝色,红色或黄色,请尝试禁用Limit console output中的Window --> Preferences --> Run/Debug --> Console