Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Логирование в Java: основы и лучшие практики

Основы логирования в Java

В этом руководстве мы изучим логирование в Java и его различные компоненты с помощью примеров.

Java позволяет создавать и захватывать сообщения логов и файлы через процесс логирования.

В Java логирование требует фреймворков и API. У Java есть встроенный фреймворк логирования в пакете java.util.logging.

Мы также можем использовать сторонние фреймворки, такие как Log4j, Logback и многие другие для целей логирования.


Компоненты логирования в Java

На рисунке ниже изображены основные компоненты и поток управления Java Logging API (java.util.logging).

Логирование в Java: основы и лучшие практики

1. Logger (Логгер)

Класс Logger предоставляет методы для логирования. Мы можем инстанцировать объекты из класса Logger и вызывать его методы для целей логирования.

Пример:

Logger logger = Logger.getLogger("newLoggerName"); 

Метод getLogger() класса Logger используется для поиска или создания нового Logger. Строковый аргумент определяет имя логгера.

Здесь это создает новый объект Logger или возвращает существующий Logger с тем же именем.

Существует соглашение определять Logger после текущего класса, используя class.getName().

Logger logger = Logger.getLogger(MyClass.class.getName()); 
Примечание: Этот метод выбросит NullPointerException, если переданное имя null.

У каждого Logger есть уровень, определяющий важность сообщения лога. Существует 7 основных уровней логирования:

Уровень лога (по убыванию)Использование
SEVEREсерьезный сбой
WARNINGпредупреждение, потенциальная проблема
INFOобщая информация о выполнении
CONFIGинформация о конфигурации
FINEобщая информация разработчика (трассировка)
FINERподробная информация разработчика (трассировка)
FINESTвысокодетализированная информация разработчика (трассировка)
OFFотключить логирование для всех уровней
ALLвключить логирование для всех уровней

У каждого уровня лога есть целочисленное значение, определяющее их серьезность, кроме двух специальных уровней OFF и ALL.


Логирование сообщения

По умолчанию всегда логируются верхние три уровня. Чтобы установить другой уровень, используем следующий код:

logger.setLevel(Level.LogLevel); // пример logger.setLevel(Level.FINE); 

В этом примере только уровень FINE и уровни выше него устанавливаются для логирования. Все остальные сообщения отбрасываются.

Теперь для логирования сообщения используем метод log().

logger.log(Level.LogLevel, "log message"); // пример logger.log(Level.INFO, "This is INFO log level message"); 

Существуют сокращенные методы для логирования на желаемых уровнях.

logger.info("This is INFO log level message"); logger.warning("This is WARNING log level message"); 

Все запросы лога, прошедшие установленный уровень, затем передаются в LogRecord.

Примечание: Если уровень логгера установлен в null, его уровень наследуется от родителя и так далее вверх по дереву.

2. Фильтры (Filters)

Фильтр (если он присутствует) определяет, должен ли LogRecord быть передан дальше или нет. Как следует из названия, он фильтрует сообщения лога согласно конкретным критериям.

LogRecord передается от логгера к обработчику и от обработчика к внешним системам только если он проходит указанные критерии.

// установить фильтр logger.setFilter(filter); // получить фильтр Filter filter = logger.getFilter(); 

3. Обработчики (Handlers / Appenders)

Обработчик лога или аппендеры получают LogRecord и экспортируют его в различные цели.

Java SE предоставляет 5 встроенных обработчиков:

ОбработчикиИспользование
StreamHandlerзаписывает в OutputStream
ConsoleHandlerзаписывает в консоль
FileHandlerзаписывает в файл
SocketHandlerзаписывает в удаленные TCP порты
MemoryHandlerзаписывает в память

Обработчик может передать LogRecord фильтру, чтобы снова определить, можно ли передать его во внешние системы.

Чтобы добавить новый обработчик, используем:

logger.addHandler(handler); // пример Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

Чтобы удалить обработчик:

logger.removeHandler(handler); // пример Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

У логгера может быть несколько обработчиков. Чтобы получить все обработчики:

Handler[] handlers = logger.getHandlers(); 

4. Форматтеры (Formatters)

Обработчик также может использовать Formatter для форматирования объекта LogRecord в строку перед экспортом во внешние системы.

Java SE имеет два встроенных Formatters:

ФорматтерыИспользование
SimpleFormatterформатирует LogRecord в строку
XMLFormatterформатирует LogRecord в XML форму

Мы можем использовать следующий код для форматирования обработчика:

// форматирует в строковую форму handler.setFormatter(new SimpleFormatter()); // форматирует в XML форму handler.setFormatter(new XMLFormatter()); 

LogManager

Объект LogManager отслеживает глобальную информацию логирования. Он читает и поддерживает конфигурацию логирования и экземпляры логгеров.

Log manager — синглтон, то есть инстанцируется только один экземпляр.

Чтобы получить экземпляр log manager:

LogManager manager = LogManager.getLogManager(); 

Преимущества логирования

Вот некоторые преимущества логирования в Java.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Try-with-resources в Java: автоматическое управление ресурсами
  8. Аннотации в Java: типы, размещение и практические примеры
  9. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
  10. Понимание Java Vector: использование, особенности и сравнение с ArrayList