Логгер в Java – Пример логирования на Java

Сегодня мы рассмотрим 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 существует семь уровней регистрации.

  1. SEVERE (самый высокий)
  2. WARNING
  3. INFO
  4. CONFIG
  5. FINE
  6. FINER
  7. FINEST

Существуют еще два уровня регистрации, OFF, который отключит все регистрации, и ALL, который будет регистрировать все сообщения. Мы можем установить уровень регистрации с помощью следующего кода:

logger.setLevel(Level.FINE);

Журналы будут создаваться для всех уровней, равных или выше уровня регистрации. Например, если уровень регистрации установлен на INFO, будут создаваться журналы для сообщений регистрации INFO, WARNING и SEVERE.

Обработчики регистрации Java

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

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

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