Рубрики
Без рубрики

Регистратор в Java – Пример ведения журнала Java

Регистратор на Java. Пример регистратора Java. Пример Ведения журнала Java. java.util.ведение журнала.Регистратор, Уровни Ведения журнала Java, Обработчики, Форматтеры, Менеджер Журналов, Конфигурация.

Автор оригинала: 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 существует семь уровней ведения журнала.

  1. ТЯЖЕЛАЯ (самая высокая)
  2. ПРЕДУПРЕЖДЕНИЕ
  3. ИНФОРМАЦИЯ
  4. КОНФИГ
  5. ХОРОШО
  6. ПРЕКРАСНЫЙ
  7. САМЫЙ ПРЕКРАСНЫЙ

Есть два других уровня ведения журнала: ВЫКЛЮЧЕНО , которые отключат все ведение журнала, и ВСЕ , которые будут регистрировать все сообщения.

Мы можем установить уровень регистратора, используя следующий код:

logger.setLevel(Level.FINE);

Журналы будут сгенерированы для всех уровней, равных или превышающих уровень регистратора. Например, если уровень регистратора установлен на INFO, будут создаваться журналы для сообщений об ИНФОРМАЦИИ, ПРЕДУПРЕЖДЕНИЯХ и СЕРЬЕЗНЫХ сообщениях о ведении журнала.

Обработчики Ведения журнала Java

Мы можем добавить несколько обработчиков в регистратор java, и всякий раз, когда мы регистрируем какое-либо сообщение, каждый обработчик будет обрабатывать его соответствующим образом. Существует два обработчика по умолчанию, предоставляемых API ведения журнала Java.

  1. ConsoleHandler : Этот обработчик записывает все сообщения журнала в консоль
  2. Обработчик файлов : Этот обработчик записывает все сообщения журнала в файл в формате 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 доступны два формата.

  1. SimpleFormatter : Этот форматер генерирует текстовые сообщения с основной информацией. ConsoleHandler использует этот класс форматирования для печати сообщений журнала на консоль.
  2. 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