Java Logger: иметь разные выходные цвета для каждого уровня серьезности - PullRequest
0 голосов
/ 01 октября 2019

С помощью следующего кода из этого вопроса стека: Изменить цвет и формат вывода java.util.logging.Logger в Eclipse

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

У меня может быть файл журнала с цветами:

enter image description here

Однако мне бы хотелось иметь другой цвет, если серьезность журнала либо предупреждение, либо серьезность, либо информация. Есть ли способ сделать это без создания одного Logger объекта на серьезность?

1 Ответ

2 голосов
/ 01 октября 2019

Я думаю, что вы можете проверить журнал level на LogRecord и использовать другой ANSI-код в зависимости от уровня в методе format:

@Override
public String format(LogRecord record)
{
    StringBuilder builder = new StringBuilder();

    Level level = record.getLevel();
    if(level == Level.INFO) {
      builder.append(ANSI_GREEN);
    } else if(level == Level.WARNING) {
      builder.append(ANSI_YELLOW);
    } else if(level == Level.SEVERE) {
      builder.append(ANSI_RED);
    } else {
      builder.append(ANSI_WHITE);
    }

    builder.append("[");
    builder.append(calcDate(record.getMillis()));
    builder.append("]");

    ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...