Как выровнять сообщения журнала, используя java.util.logging - PullRequest
3 голосов
/ 03 мая 2011

Может кто-нибудь опубликовать, как добиться выравнивания в сообщениях журнала:

[10:14:31 main     package1.Class1 <init>  INFO]: initializing data..
[10:14:31 Thread-0 package2.Class2 method1 INFO]: log message

Я знаю, что могу использовать log4j, но я хочу знать, как этого добиться с помощью JUL. Я пытался использовать MessageFormat, FieldPosition, но безрезультатно.

Спасибо

1 Ответ

3 голосов
/ 03 мая 2011

Вы можете создать свой собственный java.util.logging.Formatter.Для этого вы можете расширить его следующим образом:

import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public final class MyFormatter extends Formatter {

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

        // Build output the way you want
        sb.append(new Date(record.getMillis()))
            .append(" \t")
            .append(record.getThreadID())
            .append(" \t")
            .append(record.getSourceMethodName())
            .append(" \t")
            .append(record.getSourceClassName())
            .append(" \t")
            .append(record.getLevel().getLocalizedName())
            .append(": ")
            .append(formatMessage(record))
            .append(System.getProperty("line.separator"));

        return sb.toString();
    }
}

Вы поймете идею.

Это всего лишь пример того, как вы можете обработать вывод и выровнять его, используя \ t.Это не идеальное решение, потому что вы не знаете заранее, какова длина SourceMethodName или SourceClassName или любого другого выходного поля, и только одного \ t может быть недостаточно, чтобы выровнять их все, идеально.

Решение можетиспользовать столько \ t, сколько необходимо, чтобы охватить практически все ситуации, о которых вы только можете подумать.

При этом идеальным решением является сохранение всей выходной информации и, в конце, подсчет, сколько \ tиспользуйте в зависимости от длины каждого поля.

РЕДАКТИРОВАТЬ:

Вместо \ t вы можете использовать StringBuilder вместе с String.format() для более чистого и удобного для чтения кода:

sb.append(String.Format("[%1$-10s %2$-10s %3$-10s]: %4",
    new Data(record.getMillis(),
    record.getSourceMethodName(),
    record.getSourceClassName(),
    formatMessage(record)
));

Проверьте на этой странице о том, как использовать String.format() для форматирования строки в таблицы.

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