В этом руководстве мы узнаем о ведении журнала Java и его различных компонентах с помощью примеров.
Java позволяет нам создавать и фиксировать сообщения и файлы журнала в процессе ведения журнала.
В Java для ведения журнала требуются фреймворки и API. В java.util.logging
пакете Java есть встроенная структура ведения журнала .
Мы также можем использовать сторонние фреймворки, такие как Log4j, Logback и многие другие, для ведения журнала.
Компоненты ведения журнала Java
На рисунке ниже представлены основные компоненты и поток управления Java Logging API ( java.util.logging
).

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.
- помогает в мониторинге хода программы
- помогает фиксировать любые ошибки, которые могут возникнуть
- обеспечивает поддержку для диагностики и устранения проблем