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:
- Guarde el código anterior como
CustomFormatter.java
- Compílelo con
javac CustomFormatter.java
- 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, enC:javaCustomFormatter
)
- Guarde el código anterior como
Instrucciones
- Ir a
Window --> Preferences --> Ansi Console
y comprobarTry using the standard error color setting for stderr output
, luegoApply and Close
. -
Editar
logging.properties
archivo, que se encuentra en ellib
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:- Abierto
logging.properties
con un editor de texto. En mi caso, editaréC:Program FilesJavajre1.8.0_231liblogging.properties
. - Deberías cambiar
java.util.logging.ConsoleHandler.formatter
valor (en mi caso es la línea 44) por lo que es igual aCustomFormatter
, exactamente así:java.util.logging.ConsoleHandler.formatter = CustomFormatter
. Asegúrate de guardar los cambios.
- Abierto
-
Agregar
CustomFormatter.jar
como una biblioteca del sistema JRE en Eclipse.- Ir a
Window --> Preferences --> Java --> Installed JREs
- Seleccione el JRE que está utilizando, haga clic en
Edit
yAdd External JARs...
- Ve a la carpeta en la que guardaste
CustomFormatter.jar
y selecciónelo. - Asegúrese de que esté en la lista de bibliotecas del sistema y haga clic en
Finish
yApply and Close
-
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:
- Ir a
NOTA: Si el texto de salida estándar aparece azul, rojo o amarillo, intente desactivar Limit console output
en Window --> Preferences --> Run/Debug --> Console