Сегодня мы рассмотрим Logger в Java. Java Logger предоставляет возможность регистрации в программировании на Java.
Logger в Java
Java Logging API было введено в версии 1.4, и вы можете использовать API регистрации Java для регистрации сообщений приложения. В этом учебном пособии по регистрации Java мы узнаем основные функции Java Logger. Мы также рассмотрим пример Java Logger различных уровней регистрации, обработчиков регистрации, форматировщиков, фильтров, менеджера регистрации и конфигураций регистрации.
Java Logger
java.util.logging.Logger
– это класс, используемый для регистрации сообщений приложения в API регистрации Java. Мы можем создать Java Logger с помощью очень простой однострочной кодировки;
Logger logger = Logger.getLogger(MyClass.class.getName());
Уровни регистрации Java
java.util.logging.Level
определяет различные уровни регистрации в Java. В Java существует семь уровней регистрации.
- SEVERE (самый высокий)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST
Существуют еще два уровня регистрации, OFF, который отключит все регистрации, и ALL, который будет регистрировать все сообщения. Мы можем установить уровень регистрации с помощью следующего кода:
logger.setLevel(Level.FINE);
Журналы будут создаваться для всех уровней, равных или выше уровня регистрации. Например, если уровень регистрации установлен на INFO, будут создаваться журналы для сообщений регистрации INFO, WARNING и SEVERE.
Обработчики регистрации Java
Мы можем добавлять несколько обработчиков к регистратору Java, и при регистрации любого сообщения каждый обработчик будет обрабатывать его соответственно. В Java Logging API предоставляются два стандартных обработчика.
- ConsoleHandler: Этот обработчик записывает все сообщения регистрации в консоль
- FileHandler: Этот обработчик записывает все сообщения регистрации в файл в формате XML.
Мы также можем создавать собственные обработчики для выполнения определенных задач. Чтобы создать собственный класс обработчика, нам нужно расширить класс java.util.logging.Handler или любой из его подклассов, таких как StreamHandler, SocketHandler и т. д. Вот пример собственного обработчика журналирования на языке Java:
package com.journaldev.log;
import java.util.logging.LogRecord;
import java.util.logging.StreamHandler;
public class MyHandler extends StreamHandler {
@Override
public void publish(LogRecord record) {
//add own logic to publish
super.publish(record);
}
@Override
public void flush() {
super.flush();
}
@Override
public void close() throws SecurityException {
super.close();
}
}
Форматеры журналирования в Java
Форматеры используются для форматирования сообщений журнала. В API журналирования Java доступны два типа форматеров.
- SimpleFormatter: Этот форматер генерирует текстовые сообщения с базовой информацией. Класс ConsoleHandler использует этот форматер для вывода сообщений журнала на консоль.
- XMLFormatter: Этот форматер генерирует XML-сообщения для журнала; класс FileHandler использует XMLFormatter как форматер по умолчанию.
Мы можем создать собственный класс форматера, расширив класс java.util.logging.Formatter
, и присоединить его к любому из обработчиков. Вот пример простого собственного класса форматера.
package com.journaldev.log;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
public class MyFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getThreadID()+"::"+record.getSourceClassName()+"::"
+record.getSourceMethodName()+"::"
+new Date(record.getMillis())+"::"
+record.getMessage()+"\n";
}
}
Логгер в Java – Менеджер журнала Java
java.util.logging.LogManager
– это класс, который считывает конфигурацию регистрации, создает и поддерживает экземпляры регистраторов. Мы можем использовать этот класс для установки нашей собственной конфигурации, специфичной для приложения.
LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));
Вот пример файла конфигурации API регистрации Java. Если мы не указываем какую-либо конфигурацию, она считывается из файла lib/logging.properties
в домашнем каталоге JRE. mylogging.properties
handlers= java.util.logging.ConsoleHandler
.level= FINE
# вывод по умолчанию в файл в домашнем каталоге пользователя.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
# Ограничение сообщений, которые выводятся на консоль, до уровня INFO и выше.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
com.journaldev.files = SEVERE
Вот простая программа на Java, демонстрирующая использование Logger в Java.
package com.journaldev.log;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class LoggingExample {
static Logger logger = Logger.getLogger(LoggingExample.class.getName());
public static void main(String[] args) {
try {
LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));
} catch (SecurityException | IOException e1) {
e1.printStackTrace();
}
logger.setLevel(Level.FINE);
logger.addHandler(new ConsoleHandler());
// добавление пользовательского обработчика
logger.addHandler(new MyHandler());
try {
// имя файла FileHandler с максимальным размером и ограничением количества файлов журнала
Handler fileHandler = new FileHandler("/Users/pankaj/tmp/logger.log", 2000, 5);
fileHandler.setFormatter(new MyFormatter());
// установка пользовательского фильтра для FileHandler
fileHandler.setFilter(new MyFilter());
logger.addHandler(fileHandler);
for(int i=0; i<1000; i++){
// журналирование сообщений
logger.log(Level.INFO, "Msg"+i);
}
logger.log(Level.CONFIG, "Config data");
} catch (SecurityException | IOException e) {
e.printStackTrace();
}
}
}
Когда вы запустите приведенный выше пример программы регистратора Java, вы заметите, что журнал CONFIG не выводится в файл, это из-за класса MyFilter.
package com.journaldev.log;
import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
public class MyFilter implements Filter {
@Override
public boolean isLoggable(LogRecord log) {
// не журналировать сообщения CONFIG в файле
if(log.getLevel() == Level.CONFIG) return false;
return true;
}
}
Также формат вывода будет таким же, как определено классом MyFormatter.
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg977
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg978
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg979
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg980
Если мы не добавим собственный класс Formatter в FileHandler, сообщения журнала будут выводиться таким образом.
<record>
<date>2012-12-14T17:03:13</date>
<millis>1355533393319</millis>
<sequence>996</sequence>
<logger>com.journaldev.log.LoggingExample</logger>
<level>INFO</level>
<class>com.journaldev.log.LoggingExample</class>
<method>main</method>
<thread>1</thread>
<message>Msg996</message>
</record>
Сообщения консольного журнала будут иметь следующий формат:
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg997
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998
На рисунке ниже показан окончательный пример проекта Java Logger. Вот и все, что касается регистратора в Java и примера использования Java Logger. Проект можно загрузить по ссылке ниже.
Скачать Пример Проекта Java Logger
Ссылка: API Логирования Java
Source:
https://www.digitalocean.com/community/tutorials/logger-in-java-logging-example