web-dev-qa-db-fra.com

Modifier la couleur et le format de la sortie Java.util.logging.Logger dans Eclipse

Je cherchais un moyen de modifier la couleur d'une sortie de journal à partir de Java.util.logging.Logger dans Eclipse. Comme je n'ai pas vraiment trouvé de solution qui permette de changer la couleur et de combiner cela avec la classe Logger, je voudrais documenter ma solution ici.

6
Manuel Moser

Créer une nouvelle classe qui hérite de 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);
    }
}


Vous pouvez lier le formateur personnalisé à votre enregistreur comme ceci:

Logger logger = Logger.getLogger("logfile.txt");
logger.setUseParentHandlers(false);

ConsoleHandler handler = new ConsoleHandler();

Formatter formatter = new LogFormatter();
handler.setFormatter(formatter);        

logger.addHandler(handler);

Les codes d'échappement ANSI peuvent être activés pour la console Eclipse avec le plugin this

Sources:

8
Manuel Moser