Автор оригинала: Pankaj Kumar.
Сегодня мы рассмотрим регистратор на Java. Регистратор Java обеспечивает ведение журнала в программировании на Java.
Регистратор на Java
Java Logging API был представлен в версии 1.4, и вы можете использовать java logging API для регистрации сообщений приложений. В этом учебнике по ведению журнала Java мы изучим основные функции регистратора Java. Мы также рассмотрим пример регистратора Java с различными уровнями ведения журнала, Обработчиками ведения журнала, Форматерами, фильтрами, Менеджером журналов и конфигурациями ведения журнала.
Регистратор Java
java.util.ведение журнала.Logger
– это класс, используемый для регистрации сообщений приложений в java logging API.
Мы можем создать регистратор java с очень простым однострочным кодом, как;
Logger logger = Logger.getLogger(MyClass.class.getName());
Уровни ведения журнала Java
java.util.ведение журнала.Уровень
определяет различные уровни ведения журнала java. В Java существует семь уровней ведения журнала.
- ТЯЖЕЛАЯ (самая высокая)
- ПРЕДУПРЕЖДЕНИЕ
- ИНФОРМАЦИЯ
- КОНФИГ
- ХОРОШО
- ПРЕКРАСНЫЙ
- САМЫЙ ПРЕКРАСНЫЙ
Есть два других уровня ведения журнала: ВЫКЛЮЧЕНО , которые отключат все ведение журнала, и ВСЕ , которые будут регистрировать все сообщения.
Мы можем установить уровень регистратора, используя следующий код:
logger.setLevel(Level.FINE);
Журналы будут сгенерированы для всех уровней, равных или превышающих уровень регистратора. Например, если уровень регистратора установлен на INFO, будут создаваться журналы для сообщений об ИНФОРМАЦИИ, ПРЕДУПРЕЖДЕНИЯХ и СЕРЬЕЗНЫХ сообщениях о ведении журнала.
Обработчики Ведения журнала Java
Мы можем добавить несколько обработчиков в регистратор java, и всякий раз, когда мы регистрируем какое-либо сообщение, каждый обработчик будет обрабатывать его соответствующим образом. Существует два обработчика по умолчанию, предоставляемых API ведения журнала Java.
- ConsoleHandler : Этот обработчик записывает все сообщения журнала в консоль
- Обработчик файлов : Этот обработчик записывает все сообщения журнала в файл в формате XML.
Мы можем создать ваши собственные обработчики также для выполнения конкретных задач. Чтобы создать наш собственный класс обработчика, нам нужно расширить java.util.logging.Обработчик Класс или любой из его подклассов, таких как 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
Формататоры используются для форматирования сообщений журнала. В java logging API доступны два формата.
- SimpleFormatter : Этот форматер генерирует текстовые сообщения с основной информацией. ConsoleHandler использует этот класс форматирования для печати сообщений журнала на консоль.
- XmlFormatter : Этот форматер генерирует XML-сообщение для журнала, обработчик файлов использует XmlFormatter в качестве форматера по умолчанию.
Мы можем создать наш собственный пользовательский класс форматирования, расширив java.util.logging.Форматер
класс и прикрепите его к любому из обработчиков. Вот пример простого пользовательского класса форматирования.
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.ведение журнала.LogManager
– это класс, который считывает конфигурацию ведения журнала, создает и поддерживает экземпляры регистратора. Мы можем использовать этот класс для настройки вашей собственной конфигурации приложения.
LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));
Вот пример файла конфигурации API ведения журнала Java. Если мы не указываем какую-либо конфигурацию, она считывается из файла JRE Home lib/logging.properties
.
Вот пример файла конфигурации API ведения журнала Java. Если мы не указываем какую-либо конфигурацию, она считывается из файла JRE Home || lib/logging.properties||.
handlers= java.util.logging.ConsoleHandler .level= FINE # default file output is in user's home directory. 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 # Limit the message that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter com.journaldev.files = SEVERE
Вот простая программа на Java, показывающая использование регистратора на 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()); //adding custom handler logger.addHandler(new MyHandler()); try { //FileHandler file name with max size and number of log files limit Handler fileHandler = new FileHandler("/Users/pankaj/tmp/logger.log", 2000, 5); fileHandler.setFormatter(new MyFormatter()); //setting custom filter for FileHandler fileHandler.setFilter(new MyFilter()); logger.addHandler(fileHandler); for(int i=0; i<1000; i++){ //logging messages logger.log(Level.INFO, "Msg"+i); } logger.log(Level.CONFIG, "Config data"); } catch (SecurityException | IOException e) { e.printStackTrace(); } } }
Когда вы запустите пример программы java logger, вы заметите, что журнал конфигурации не печатается в файле, это связано с классом 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) { //don't log CONFIG logs in file 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
Если мы не добавим наш собственный класс форматирования в обработчик файлов, сообщение журнала будет напечатано следующим образом.
2012-12-14T17:03:13 1355533393319 996 com.journaldev.log.LoggingExample INFO com.journaldev.log.LoggingExample main 1 Msg996
Сообщения журнала консоли будут иметь следующий формат:
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. Вы можете скачать проект по ссылке ниже.
Ссылка: API ведения журнала Java