Настройка форматирования вывода java.util.logging в Java
Быстрый ответ
Хотите сделать вывод логов более компактным? Для этого создайте свой java.util.logging.Formatter
и переопределите метод format
так, чтобы он объединял информацию логов без перевода строки. Затем установите его для обработчиков и наслаждайтесь логами, записанными в одну строку.
Пример кода для определения нового форматтера:
import java.util.logging.*;
public class OneLinerFormatter extends Formatter {
@Override
public String format(LogRecord rec) {
// Формируем логи в виде одной строки
return rec.getLevel() + " " + rec.getMessage() + "\n";
}
}
Чтобы воспользоваться этим форматтером, вызовите следующие строки кода:
Logger logger = Logger.getLogger("compactLogger");
ConsoleHandler ch = new ConsoleHandler();
ch.setFormatter(new OneLinerFormatter()); // Однострочный вывод логов готов!
logger.addHandler(ch);
logger.info("Лог записан в одну строку!"); // Наслаждаемся результатом!
Быстрое решение при помощи SimpleFormatter
Желаете настроить SimpleFormatter
так, чтобы он формировал все записи в один ряд? Воспользуйтесь параметром java.util.logging.SimpleFormatter.format
и задайте шаблон работы SimpleFormatter.
Используйте следующую команду для консоли:
-Djava.util.logging.SimpleFormatter.format="%1$tF %1$tT %4$s %2$s %5$s%6$s%n"
Подробности о заполнителях в данной команде:
%1$tF %1$tT
– дата и время события,%4$s
– уровень серьёзности сообщения,%2$s
– источник сообщения,%5$s%6$s
– текст сообщения и информация об исключении.
Данную настройку стоит применять до инициализации каких-либо логгеров в приложении.
Выход на новый уровень конфигурации
Общие настройки проекта через logger.properties
Чтобы установить формат логирования для всего проекта, задайте свой шаблон в файле logger.properties
:
java.util.logging.SimpleFormatter.format=%1$tF %1$tT %4$s %2$s %5$s%6$s%n
Данная конфигурация обеспечивает единый формат вывода логов для всего вашего приложения.
Динамическая настройка
Хотите изменить формат логов в реальном времени? Воспользуйтесь методом System.setProperty
:
System.setProperty("java.util.logging.SimpleFormatter.format",
"%1$tF %1$tT %4$s %2$s %5$s%6$s%n");
Учтите, что данное действие должно быть выполнено до начала работы логгеров.
Создание собственных форматтеров
Использование MessageFormat и Formatter
Если перед вами вставили сложную задачу, требующую нестандартного решения, вы можете использовать MessageFormat
в сочетании с Formatter
для создания пользовательских шаблонов вывода логов. Вы сможете настроить их в соответствии с конкретными требованиями или стандартами, например, форматом JSON.
Класс SingleLineFormatter для индивидуальных потребностей
Если вашей задаче требуется особый подход, вы можете использовать класс SingleLineFormatter
:
import java.util.logging.*;
import java.util.*;
public class SingleLineFormatter extends SimpleFormatter {
private static final String pattern = "%1$tF %1$tT %4$s %2$s %5$s%6$s%n";
@Override
public synchronized String format(LogRecord lr) {
return String.format(pattern,
new Date(lr.getMillis()),
lr.getSourceClassName() + "." + lr.getSourceMethodName(),
lr.getLoggerName(),
lr.getLevel().getLocalizedName(),
lr.getMessage(),
Optional.ofNullable(lr.getThrown()).map(Throwable::toString).orElse(""));
}
}
Примените этот класс в настройках логгеров для улучшения форматирования логов.
Визуализация
😵💭 До конфигурации: логи были хаотичными и разбросанными по множеству строк.
🎇💭 После конфигурации: они стали чёткими и уложенными в одну строку.
Как это выглядит на практике?
Логи в несколько строк: Логи в одну строку:
[INFO] Старт приложения [INFO] Старт приложения | [DEBUG] Запуск модуля | [ERROR] Ошибка указателя
[DEBUG] Запуск модуля ---------------------------------------------------------------------------
[ERROR] Ошибка указателя
Создание собственного форматтера в Java преобразовывает хаотический вывод логов в наглядную последовательность.
Полезные материалы
- java.util.logging (Java Platform SE 8) — подробное руководство Oracle по логированию в Java.
- Chapter 2: Архитектура — изучите структуру и скрытые возможности Logback.
- Java Logging — Якоб Йенков рассказывает о принципах логирования в Java.
- Chapter 6: Раскладки — узнайте о раскладках в Logback.
- Руководство по SLF4J — полезная информация о SLF4J из первых рук.
- Учебник по Java Logging API — всё о продвинутом логировании в Java с помощью Log4j2.