Вы можете создать свой собственный 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()
для форматирования строки в таблицы.