Saltar al contenido

¿Por qué algunos resultados en la consola Eclipse son rojos?

Solución:

Si la configuración de las preferencias de la consola es estándar (en otras palabras, no ha realizado ningún cambio), entonces el rojo es por error

El negro es el color de texto de salida estándar

Esta preferencia controla el color del texto escrito en el flujo de salida estándar por una aplicación.

El rojo es el color del texto de error estándar

Esta preferencia controla el color del texto escrito en la secuencia de error estándar por una aplicación.

Docs

La diferencia es System.out v. System.err

Esta es una vieja pregunta pero la resolví, así que aquí está mi respuesta.

El problema es que Eclipse siempre muestra la salida stderr del mismo color (en este caso, rojo). Es configurable en la configuración, pero siempre será el mismo para todos los flujos stderr.

Mi solución es usar un formateador personalizado para el controlador de la consola e inyecte códigos de color ANSI antes de cada mensaje según su nivel. Así que hice eso, basado en el original. SimpleFormatter.java en JDK8. Aquí está el código:

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);
        }
    }
}

Prerrequisitos

  • Complemento ANSI Escape in Console para Eclipse. Lo necesitará para que la consola Eclipse pueda interpretar los códigos de escape ANSI. Instálalo y reinicia Eclipse.

  • El código anterior compilado y comprimido en un archivo .jar:

    1. Guarde el código anterior como CustomFormatter.java
    2. Compílelo con javac CustomFormatter.java
    3. Cree un archivo JAR que contenga el archivo de clase con jar cfv CustomFormatter.jar CustomFormatter.class y guárdelo en la carpeta que desee (por ejemplo, en C:javaCustomFormatter)

Instrucciones

  • Ir a Window --> Preferences --> Ansi Console y comprobar Try using the standard error color setting for stderr output, luego Apply and Close.
  • Editar logging.properties archivo, que se encuentra en el lib carpeta de su JRE. Puede tener varios en su computadora, debe editar el correspondiente a la versión de JRE que está usando Eclipse. Puede saber cuál está usando leyendo debajo de la pestaña “Consola” en Eclipse: Carpeta JRE

    1. Abierto logging.properties con un editor de texto. En mi caso, editaré C:Program FilesJavajre1.8.0_231liblogging.properties.
    2. Deberías cambiar java.util.logging.ConsoleHandler.formatter valor (en mi caso es la línea 44) por lo que es igual a CustomFormatter, exactamente así: java.util.logging.ConsoleHandler.formatter = CustomFormatter. Asegúrate de guardar los cambios.
  • Agregar CustomFormatter.jar como una biblioteca del sistema JRE en Eclipse.

    1. Ir a Window --> Preferences --> Java --> Installed JREs
    2. Seleccione el JRE que está utilizando, haga clic en Edit y Add External JARs...
    3. Ve a la carpeta en la que guardaste CustomFormatter.jar y selecciónelo.
    4. Asegúrese de que esté en la lista de bibliotecas del sistema y haga clic en Finish y Apply and Close
    5. Eso es todo. Ahora debería tener diferentes colores para cada nivel de Logger. Es cian para INFO, amarillo para ADVERTENCIA y rojo para SEVERE. Puede cambiarlo a cualquier color que desee modificando el código anterior con el código de color ANSI correspondiente. Me está funcionando con java 8 y Eclipse 2019-12:

      Resultado

NOTA: Si el texto de salida estándar aparece azul, rojo o amarillo, intente desactivar Limit console output en Window --> Preferences --> Run/Debug --> Console

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *