Ведение журнала Java
Ведение журнала Java
В этом руководстве мы узнаем о ведении журнала Java и его различных компонентах с помощью примеров.
Java позволяет нам создавать и сохранять сообщения и файлы журнала в процессе ведения журнала.
В Java для ведения журнала требуются фреймворки и API. Java имеет встроенную структуру ведения журналов в java.util.logging
. пакет.
Мы также можем использовать сторонние платформы, такие как Log4j, Logback и многие другие, для ведения журналов.
<час>Компоненты ведения журналов Java
На рисунке ниже представлены основные компоненты и поток управления Java Logging API (java.util.logging
).
1. Регистратор
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 основных уровней ведения журнала:
Уровень журнала (в порядке убывания) | Использовать |
---|---|
СЕРЬЕЗНЫЙ | серьезный сбой |
ВНИМАНИЕ | предупреждающее сообщение, потенциальная проблема |
ИНФОРМАЦИЯ | общая информация о времени выполнения |
КОНФИГУРАЦИЯ | информация о конфигурации |
ОТЛИЧНО | общая информация для разработчиков (отслеживание сообщений) |
ФИНЕР | подробная информация о разработчике (отслеживание сообщений) |
ЛУЧШИЙ | очень подробная информация о разработчике (отслеживание сообщений) |
ВЫКЛ | отключить ведение журнала для всех уровней (ничего не записывать) |
ВСЕ | включить ведение журнала для всех уровней (записывать все) |
Каждый уровень журнала имеет целочисленное значение, определяющее их серьезность, за исключением двух специальных уровней журнала 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 должны быть переданы или нет. Как следует из названия, он фильтрует сообщения журнала в соответствии с определенными критериями.
Запись журнала передается от средства ведения журнала к обработчику журнала и от обработчика журнала к внешним системам только в том случае, если он соответствует указанным критериям.
// 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 имеет два встроенных Formatters. :
Форматеры | Использовать |
---|---|
SimpleFormatter | форматирует LogRecord в строку |
XMLFormatter | форматирует LogRecord в форму XML |
Мы можем использовать следующий код для форматирования обработчика:
// formats to string form
handler.setFormatter(new SimpleFormatter());
// formats to XML form
handler.setFormatter(new XMLFormatter());
<час> Менеджер журналов
Менеджер журналов объект отслеживает глобальную информацию журнала. Он считывает и поддерживает конфигурацию ведения журнала и экземпляры регистратора.
Диспетчер журналов является одноэлементным, что означает, что создается только один его экземпляр.
Чтобы получить экземпляр диспетчера журналов, мы используем следующий код:
LogManager manager = new LogManager();
<час> Преимущества ведения журнала
Вот некоторые из преимуществ ведения журнала в Java.
- помогает следить за ходом программы
- помогает фиксировать любые ошибки, которые могут возникнуть
- поддерживает диагностику и отладку проблем
java