Java logging api log to file

Учебник по API ведения журнала Java

Примеры “java.util.logging`, уровни ведения журнала, свойства журнала и файл java.util.logging.config.

В этом руководстве показано ведение журнала с использованием встроенных API-интерфейсов ведения журнала Java в пакете java.util.logging .

P.S То То поставляется в комплекте с Java начиная с JDK 1.4.

1. API ведения журнала Java Привет, Мир

1.1 API-интерфейсы ведения журнала Java или java.util.logging пример hello world, регистрирует некоторые сообщения и отображает их в консоли.

package com.mkyong; import java.util.logging.Level; import java.util.logging.Logger; public class HelloWorld < private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); public static void main(String[] args) < // set log level to SEVERE, default level info //logger.setLevel(Level.SEVERE); // Log a info level msg logger.info("This is level info logging"); logger.log(Level.WARNING, "This is level warning logging"); logger.log(Level.SEVERE, "This is level severe logging"); System.out.println("Hello Java Logging APIs."); >>
Jun 05, 2021 1:35:08 PM com.mkyong.HelloWorld main INFO: This is level info logging Jun 05, 2021 1:35:08 PM com.mkyong.HelloWorld main WARNING: This is level warning logging Jun 05, 2021 1:35:08 PM com.mkyong.HelloWorld main SEVERE: This is level severe logging Hello Java Logging APIs.

2. Уровни ведения журнала

2.1 В java.util.logging пакет содержит 7 уровней ведения журнала:

  • ТЯЖЕЛЫЙ (наивысшее значение)
  • предупреждение
  • ИНФОРМАЦИЯ (по умолчанию)
  • конфигурация
  • хорошо
  • прекрасный
  • ЛУЧШИЙ (наименьшее значение)

Примечание Прочитайте Уровень ведения журнала Java .

2.2 Если мы установим уровень ведения журнала на СЕРЬЕЗНЫЙ , он будет регистрировать сообщения, равные или превышающие СЕРЬЕЗНЫЙ уровень. И поскольку СЕРЬЕЗНЫЙ является самым высоким уровнем ведения журнала, он регистрирует сообщения только на уровне СЕРЬЕЗНЫЙ|/.

package com.mkyong; import java.util.logging.Level; import java.util.logging.Logger; public class HelloWorld2 < private static Logger logger = Logger.getLogger(HelloWorld.class.getName()); public static void main(String[] args) < // set log level to SEVERE, default level info logger.setLevel(Level.SEVERE); // Log a info level msg logger.info("This is level info logging"); logger.log(Level.WARNING, "This is level warning logging"); logger.log(Level.SEVERE, "This is level severe logging"); System.out.println("Hello Java Logging APIs."); >>
Jun 05, 2021 1:41:07 PM com.mkyong.HelloWorld main SEVERE: This is level severe logging Hello Java Logging APIs.

2.3 Если мы установим уровень ведения журнала на ПРЕДУПРЕЖДЕНИЕ , он будет регистрировать сообщения, равные или превышающие уровень ПРЕДУПРЕЖДЕНИЕ , которые являются Уровнем. СУРОВЫЙ и Уровень. ПРЕДУПРЕЖДЕНИЕ .

// set logging level to WARNING logger.setLevel(Level.WARNING);
Jun 05, 2021 5:08:11 PM com.mkyong.HelloWorld main WARNING: This is level warning logging Jun 05, 2021 5:08:11 PM com.mkyong.HelloWorld main SEVERE: This is level severe logging Hello Java Logging APIs.

3. Выход

API-интерфейсы ведения журнала Java ( java.util.logging ) по умолчанию загружают logging.properties в $JAVA_HOME/jre/библиотеке/ (Java 8 и выше); для Java 9 и выше файл logging.properties перемещен в $JAVA_HOME/conf .

3.1 Ниже приведен пример logging.properties , который записывает сообщения как в консоль, так и в файл.

# Logs to file and console handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler # Global logging levels, 7 levels .level= SEVERE # Log file output in user's home directory, %h 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 # java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.SimpleFormatter.format=[%1$tc] %4$s: %5$s %n # log level for package com.mkyong.level = SEVERE

3.2 Мы можем поместить файл logging.properties в папку ресурсы (стандартный каталог Maven) и использовать системное свойство java.util.ведение журнала.конфигурация.файл для определения местоположения logging.properties .

Читайте также:  Поле загрузки файлов, которое мы заслужили

Примечание |/Как загрузить logging.properties для java.util.logging

package com.mkyong; import java.util.logging.Level; import java.util.logging.Logger; public class LoadLogPropertiesFile < static < // must set before the Logger String path = LoadLogPropertiesFile.class.getClassLoader() .getResource("logging.properties").getFile(); System.setProperty("java.util.logging.config.file", path); >private static Logger logger = Logger.getLogger(LoadLogPropertiesFile.class.getName()); public static void main(String[] args) < logger.fine("This is level fine logging"); // Log a fine level msg logger.info("This is level info logging"); logger.log(Level.SEVERE, "This is level severe logging"); logger.log(Level.WARNING, "This is level warning logging"); System.out.println("Hello Java Logging APIs."); >>

Вывод в консоль с помощью Простой форматер .

[Sat Jun 05 14:04:18 MYT 2021] SEVERE: This is level severe logging Hello Java Logging APIs.

Вывод в файл с помощью XmlFormatter .

    2021-06-05T06:04:18.276214600Z 1622873058276 214600 0 com.mkyong.LoadLogPropertiesFile SEVERE com.mkyong.LoadLogPropertiesFile main 1 This is level severe logging   

4. Вывод в файл с помощью ||XmlFormatter||.

Системное свойство java.util.ведение журнала.конфигурация.файл определил местоположение logging.properties .

В командной строке мы можем использовать системное свойство java.util.ведение журнала.конфигурация.файл для определения местоположения файла logging.properties во время выполнения.

$ java -jar -Djava.util.logging.config.file=/path/logging.properties server.jar

5. Почему стоит выбрать java.util.logging

Этот API-интерфейс ведения журнала Java или java.util.logging является частью Java JDK, подходящей для простого проекта, для которого требовались только базовые функции ведения журнала, такие как журналы для консоли или файла.

Для более продвинутых функций ведения журнала, таких как ротация файлов журнала, отправка электронной почты для журналов ошибок, отправка журналов в базу данных и т.д. Существует множество сторонних фреймворков ведения журнала, таких как фасад ведения журнала SLF4j , или фреймворк ведения журнала, такой как Обратный вход и Apache Log4j 2 .

6. Скачать Исходный Код

7. Рекомендации

  • JavaDoc java.util.ведение журнала
  • Обзор ведения журнала Java
  • Stackoverflow – Почему такой уровень. ХОРОШИЕ сообщения в журнале не отображаются?
  • Окончательное руководство по ведению журнала
  • Java – Чтение файла из папка ресурсов
  • пример ведения журнала.свойства
  • Как загрузить logging.properties для java.util.logging
  • учебник по крошечному журналу

Источник

Logger in Java — Java Logging Example

Logger in Java - Java Logging Example

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Читайте также:  Kotlin in action epub

Logger in Java

logger in java, java logging example Java Logging API was introduced in 1.4 and you can use java logging API to log application messages. In this java logging tutorial, we will learn basic features of Java Logger. We will also look into Java Logger example of different logging levels, Logging Handlers, Formatters, Filters, Log Manager and logging configurations. Java logging, logger in java, java logger example

Java Logger

java.util.logging.Logger is the class used to log application messages in java logging API. We can create java Logger with very simple one line code as;

Logger logger = Logger.getLogger(MyClass.class.getName()); 

Java Logging Levels

  1. SEVERE (highest)
  2. WARNING
  3. INFO
  4. CONFIG
  5. FINE
  6. FINER
  7. FINEST

There are two other logging levels, OFF that will turn off all logging and ALL that will log all the messages. We can set the logger level using following code:

The logs will be generated for all the levels equal to or greater than the logger level. For example if logger level is set to INFO, logs will be generated for INFO, WARNING and SEVERE logging messages.

Java Logging Handlers

We can add multiple handlers to a java logger and whenever we log any message, every handler will process it accordingly. There are two default handlers provided by Java Logging API.

  1. ConsoleHandler: This handler writes all the logging messages to console
  2. FileHandler: This handler writes all the logging messages to file in the XML format.

We can create our own custom handlers also to perform specific tasks. To create our own Handler class, we need to extend java.util.logging.Handler class or any of it’s subclasses like StreamHandler, SocketHandler etc. Here is an example of a custom java logging handler:

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 Logging Formatters

Formatters are used to format the log messages. There are two available formatters in java logging API.

  1. SimpleFormatter: This formatter generates text messages with basic information. ConsoleHandler uses this formatter class to print log messages to console.
  2. XMLFormatter: This formatter generates XML message for the log, FileHandler uses XMLFormatter as a default formatter.

We can create our own custom Formatter class by extending java.util.logging.Formatter class and attach it to any of the handlers. Here is an example of a simple custom formatter class.

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"; >> 

Logger in Java — Java Log Manager

java.util.logging.LogManager is the class that reads the logging configuration, create and maintains the logger instances. We can use this class to set our own application specific configuration.

LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties")); 

Here is an example of Java Logging API Configuration file. If we don’t specify any configuration, it’s read from JRE Home lib/logging.properties file. mylogging.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 

Here is a simple java program showing usage of Logger in 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; ilogger.log(Level.CONFIG, "Config data"); > catch (SecurityException | IOException e) < e.printStackTrace(); >> > 

When you will run above java logger example program, you will notice that CONFIG log is not getting printed in file, that is because of MyFilter class.

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; >> 

Also the output format will be same as defined by MyFormatter class.

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 

If we don’t add our own Formatter class to FileHandler, the log message will be printed like this.

 2012-12-14T17:03:13 1355533393319 996 com.journaldev.log.LoggingExample INFO com.journaldev.log.LoggingExample main 1 Msg996  

Console log messages will be of following format:

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 

logger in java, java logging example

Below image shows the final Java Logger example project. That’s all for Logger in Java and Java Logger Example. You can download the project from below link.

Читайте также:  Javascript defaults for function parameters

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Источник

Оцените статью