I was looking for a way to change the color of a log output from java.util.logging.Logger in Eclipse. Since I haven't really found a solution that addresses changing color and combining that with the Logger class I would like to document my solution here.
During development, you can browse and manipulate the platform log file using the Error Log view (Window > Show View > General > Error Log). You can also have the log file mirrored in the Java console by starting Eclipse with the -consoleLog command-line argument.
A Logger object is used to log messages for a specific system or application component. Loggers are normally named, using a hierarchical dot-separated namespace. Logger names can be arbitrary strings, but they should normally be based on the package name or class name of the logged component, such as java.net or javax.
Java Util Logging performance is significantly affected by the lack of a buffered handler. There is no major difference between Log4j and Logback. Both Log4j and Logback show about 50% of the performance of my special case optimized strawman.
Create a new class which inherits from Formatter
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
public class LogFormatter extends Formatter
{
// ANSI escape code
public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";
// Here you can configure the format of the output and
// its color by using the ANSI escape codes defined above.
// format is called for every console log message
@Override
public String format(LogRecord record)
{
// This example will print date/time, class, and log level in yellow,
// followed by the log message and it's parameters in white .
StringBuilder builder = new StringBuilder();
builder.append(ANSI_YELLOW);
builder.append("[");
builder.append(calcDate(record.getMillis()));
builder.append("]");
builder.append(" [");
builder.append(record.getSourceClassName());
builder.append("]");
builder.append(" [");
builder.append(record.getLevel().getName());
builder.append("]");
builder.append(ANSI_WHITE);
builder.append(" - ");
builder.append(record.getMessage());
Object[] params = record.getParameters();
if (params != null)
{
builder.append("\t");
for (int i = 0; i < params.length; i++)
{
builder.append(params[i]);
if (i < params.length - 1)
builder.append(", ");
}
}
builder.append(ANSI_RESET);
builder.append("\n");
return builder.toString();
}
private String calcDate(long millisecs) {
SimpleDateFormat date_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date resultdate = new Date(millisecs);
return date_format.format(resultdate);
}
}
You can bind the custom formatter to your logger like this:
Logger logger = Logger.getLogger("logfile.txt");
logger.setUseParentHandlers(false);
ConsoleHandler handler = new ConsoleHandler();
Formatter formatter = new LogFormatter();
handler.setFormatter(formatter);
logger.addHandler(handler);
ANSI escape codes can be enabled for Eclipse console with this plugin
Sources:
http://www.vogella.com/tutorials/Logging/article.html
How to print color in console using System.out.println?
https://mihai-nita.net/2013/06/03/eclipse-plugin-ansi-in-console/
https://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#setLevel-java.util.logging.Level-
https://docs.oracle.com/javase/8/docs/api/java/util/logging/Level.html
An Eclipse console view that respects ANSI color codes?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With