Журналювання Java

У цьому посібнику ми дізнаємося про Java Logging та його різні компоненти за допомогою прикладів.

Java дозволяє нам створювати та фіксувати журнальні повідомлення та файли в процесі реєстрації.

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

Ми також можемо використовувати сторонні фреймворки, такі як 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 основних рівнів журналу:

Рівень журналу (за спаданням) Використовуйте
СИЛЬНИЙ серйозний збій
УВАГА попереджувальне повідомлення, потенційна проблема
ІНФОРМАЦІЯ загальна інформація про час роботи
КОНФІГ інформація про конфігурацію
ШТРАБО загальна інформація про розробника (трасування повідомлень)
ФІНЕР детальна інформація про розробника (трасування повідомлень)
НАЙКРАЩЕ дуже детальна інформація про розробника (трасування повідомлень)
ВИМК вимкнути реєстрацію для всіх рівнів (нічого не фіксувати)
ВСІ увімкнути реєстрацію для всіх рівнів (захопити все)

Кожен рівень журналу має ціле число, яке визначає їх важкість, за винятком двох спеціальних рівнів журналу 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.

  • допомагає в моніторингу потоку програми
  • допомагає у виявленні помилок, які можуть виникнути
  • забезпечує підтримку діагностики та налагодження проблем

Цікаві статті...