Ведение журнала Java

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

Java позволяет нам создавать и фиксировать сообщения и файлы журнала в процессе ведения журнала.

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

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

Компоненты ведения журнала Java

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

Ведение журнала Java

1. Регистратор

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

Возьмем пример.

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

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

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

Это соглашение об определении a Loggerпосле текущего класса с помощью class.getName().

 Logger logger = Logger.getLogger(MyClass.class.getName()); 

Примечание. Этот метод будет выдан, NullPointerExceptionесли передано имя null.

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

Уровень журнала (в порядке убывания) Использовать
СЕРЬЕЗНЫЙ серьезная неудача
ПРЕДУПРЕЖДЕНИЕ предупреждающее сообщение, потенциальная проблема
ИНФОРМАЦИЯ общая информация о времени выполнения
КОНФИГУРАЦИЯ информация о конфигурации
Штраф общая информация для разработчиков (сообщения трассировки)
FINER подробная информация для разработчиков (сообщения трассировки)
НАИЛУЧШИЙ очень подробная информация для разработчиков (сообщения трассировки)
ВЫКЛ. отключить ведение журнала для всех уровней (ничего не записывать)
ВСЕ включить ведение журнала для всех уровней (фиксировать все)

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

Запись сообщения

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

 logger.setLevel(Level.LogLevel); // example logger.setLevel(Level.FINE); 

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

Теперь, чтобы записать сообщение, мы используем log()метод.

 logger.log(Level.LogLevel, "log message"); // example 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. Фильтры

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

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

 // set a filter logger.setFilter(filter); // get a filter Filter filter = logger.getFilter(); 

3. Обработчики (аппендеры)

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

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

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

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

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

 logger.addHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); 

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

 logger.removeHandler(handler); // example Handler handler = new ConsoleHandler(); logger.addHandler(handler); logger.removeHandler(handler); 

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

 Handler() handlers = logger.getHandlers(); 

4. Форматировщики

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

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

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

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

 // formats to string form handler.setFormatter(new SimpleFormatter()); // formats to XML form handler.setFormatter(new XMLFormatter()); 

LogManager

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

Диспетчер журналов является одноэлементным, что означает, что создается только один его экземпляр.

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

 LogManager manager = new LogManager(); 

Преимущества ведения журнала

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

  • помогает в мониторинге хода программы
  • помогает фиксировать любые ошибки, которые могут возникнуть
  • обеспечивает поддержку для диагностики и устранения проблем

Интересные статьи...