Log4j 2 — пример hello world example xml. Подключение логирования Log4j в Java
Настройка логирования с помощью Apache Log4j 2 в java. Пример первоначальных настроек Log4j 2.
Используемые технологии
- Log4j 2 — 2.4.1
- Maven 3.2.5
- IntelliJ Idea 14.1.5
1. Описание задачи
Подключить логирование в Java приложение и рассмотреть основные настройки и примеры использования библиотеки Log4j 2.
2. Структура проекта
3. Настройка pom.xml
Создаем пустой проект maven и добавляем две зависимости. Больше для нашей задачи добавлять ничего не нужно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ru.javastudy</groupId> <artifactId>Log4j_Tuturoial</artifactId> <version>1.0</version> <dependencies> <!--Log4j 2--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.4.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.4.1</version> </dependency> </dependencies> </project> |
4. Настройка log4j2.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name= "ru.javastudy.examples.User" level="debug" additivity="true"> <AppenderRef ref="Console"/> </Logger> <!-- Root Logger --> <Root level="all"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> |
Файл находится в папке resources. Объявлен рутовый логгер, а так же логгер для конкретного класса.
Важными атрибутами здесь является атрибут level=’debug’ и атрибут additivity=’true’. level — задает уровень на котором будет происходить логирование (например при дебаге, при ошибках или всегда). additivity — поможет убрать дубляж в логах. Примеры работы смотрите в конце статьи. Уровни логирования в Log4j2:
Standard Level | intLevel |
---|---|
OFF | 0 |
FATAL | 100 |
ERROR | 200 |
WARN | 300 |
INFO | 400 |
DEBUG | 500 |
TRACE | 600 |
ALL | Integer.MAX_VALUE |
5. Тестирование логирования
Класс User:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package ru.javastudy.examples; import java.util.Random; public class User { private String name; private String lastName; public String showMeMessage() { return "This is some message"; } public Integer giveMeASign() { Random random = new Random(); return random.nextInt(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } } |
Создадим класс Main:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
package ru.javastudy.app; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import ru.javastudy.examples.User; public class Main { static final Logger rootLogger = LogManager.getRootLogger(); static final Logger userLogger = LogManager.getLogger(User.class); public static void main(String[] args) { User user = new User(); user.setName("Anakin"); user.setLastName("Skywalker"); userLogger.info(user.showMeMessage()); userLogger.info(user.giveMeASign()); rootLogger.info("Root Logger: " + user.showMeMessage()); //debug if (rootLogger.isDebugEnabled()) { rootLogger.debug("RootLogger: In debug message"); userLogger.debug("UserLogger in debug"); } try { User userNull = new User(); userNull.getName().toString(); } catch (NullPointerException ex) { userLogger.error("error message: " + ex.getMessage()); userLogger.fatal("fatal error message: " + ex.getMessage()); } } } |
Вывод:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Connected to the target VM, address: '127.0.0.1:65162', transport: 'socket' 20:43:37.407 [main] INFO ru.javastudy.examples.User - This is some message 20:43:37.407 [main] INFO ru.javastudy.examples.User - This is some message 20:43:37.409 [main] INFO ru.javastudy.examples.User - 427613566 20:43:37.409 [main] INFO ru.javastudy.examples.User - 427613566 20:43:37.409 [main] INFO - Root Logger: This is some message 20:43:37.409 [main] DEBUG - RootLogger: In debug message 20:43:37.409 [main] DEBUG ru.javastudy.examples.User - UserLogger in debug 20:43:37.409 [main] DEBUG ru.javastudy.examples.User - UserLogger in debug 20:43:37.412 [main] ERROR ru.javastudy.examples.User - error message: null 20:43:37.412 [main] ERROR ru.javastudy.examples.User - error message: null 20:43:37.412 [main] FATAL ru.javastudy.examples.User - fatal error message: null 20:43:37.412 [main] FATAL ru.javastudy.examples.User - fatal error message: null Disconnected from the target VM, address: '127.0.0.1:65162', transport: 'socket' Process finished with exit code 0 |
Немного поменяем настройки в log4j2.xml:
1 2 3 |
<Logger name= "ru.javastudy.examples.User" level="error" additivity="false"> <AppenderRef ref="Console"/> </Logger> |
Получим вывод в консоль:
1 2 3 4 |
20:51:50.063 [main] INFO - Root Logger: This is some message 20:51:50.064 [main] DEBUG - RootLogger: In debug message 20:51:50.064 [main] ERROR ru.javastudy.examples.User - error message: null 20:51:50.064 [main] FATAL ru.javastudy.examples.User - fatal error message: null |
Как видите с помощью атрибута additivity убран дубляж логирования. Так же благодаря уровню error логер userLogger сработал только в определенных местах.