Skip to content

Как настроить Log4j


Готовый проект можно взять с gitHub по ссылке: https://github.com/dev-blogs/loggerMessage

Структура проекта

loggerMessage
    ├──src
    │   ├─main
    │   │  ├─java
    │   │  │  └─com
    │   │  │     └─dev-blogs
    │   │  │         └─App.java
    │   │  └─resources
    │   │     └─log4j.properties
    │   └─test
    │      └─java
    │         └─com
    │            └─dev-blogs
    │                └─AppTest.java
    └──pom.xml

Файл свойств

В файле свойств log4j.properties указываются уровни регистрации. В данном примере указан самый высокий уровень регистрации в журнале, то есть уровень DEBUG. Это значит, что логироваться будут все сообщения, будь то debug, info, warn, error или fatal.

log4j.properties

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/temp4/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

В данном файле мы указываем, чтобы логирование производилось в стандартный аутпут и в файл. Далее мы кастомизируем логирование для каждого вывода. Для эс-тэ-дэ-аута мы указываем, что логирование производится в стандартный поток вывода System.out по шаблону который указан в свойстве log4j.appender.stdout.layout.ConversionPattern.
Тоже самое для вывода в файл, мы указываем путь к файлу в свойстве log4j.appender.file.File, размер файла и шаблон.

Java код

App.java

package com.dev_blogs;

import org.apache.log4j.Logger;

public class App {
    final static Logger logger = Logger.getLogger(App.class);
 
    public void logMessages() {
        logger.debug("debug"); // all
        logger.info("info"); // except debug
        logger.warn("warn"); // except debug and info
        logger.error("error"); // except debug, info and warn
        logger.fatal("fatal"); // only fatal
        try {
            throw new Exception("test exception");
        } catch (Exception e) {
            logger.error("exception", e);
        }
    }
}

AppTest.java

package com.dev_blogs;

import org.junit.Test;

public class AppTest {
	
	@Test
	public void testApp() {
		App app = new App();
		app.logMessages();
	}
}

pom.xml

<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>com.task</groupId>
	<artifactId>loggerMessage</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>loggerMessage</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

Сборка и запуск

Теперь соберем и запустим приложение логирования. Указав в файле свойств log4j.properties в качестве уровня регистрации DEBUG запускаем тесты:

mvn test

Получим вывод:


2016-01-25 17:11:37 DEBUG App:14 - debug
2016-01-25 17:11:37 INFO  App:16 - info
2016-01-25 17:11:37 WARN  App:18 - warn
2016-01-25 17:11:37 ERROR App:19 - error
2016-01-25 17:11:37 FATAL App:20 - fatal
2016-01-25 17:11:37 ERROR App:24 - exception
java.lang.Exception: test exception
	at com.dev_blogs.App.test(App.java:22)
	at com.dev_blogs.App.main(App.java:10)

То есть логируется все. Теперь изменим уровень регистрации в файле log4j.properties на INFO. Получим вывод всех уровней кроме debug:


2016-01-25 17:37:00 INFO  App:15 - info
2016-01-25 17:37:00 WARN  App:16 - warn
2016-01-25 17:37:00 ERROR App:17 - error
2016-01-25 17:37:00 FATAL App:18 - fatal
2016-01-25 17:37:00 ERROR App:22 - exception
java.lang.Exception: test exception
	at com.dev_blogs.App.test(App.java:20)
	at com.dev_blogs.App.main(App.java:10)

Далее понизим уровень до WARN. Запустим и получим вывод:


2016-01-25 17:39:25 WARN  App:16 - warn
2016-01-25 17:39:25 ERROR App:17 - error
2016-01-25 17:39:25 FATAL App:18 - fatal
2016-01-25 17:39:25 ERROR App:22 - exception
java.lang.Exception: test exception
	at com.dev_blogs.App.test(App.java:20)
	at com.dev_blogs.App.main(App.java:10)

Короче говоря уровни регистрации идут в таком порядке: DEBUG->INFO->WARN->ERROR->FATAL. То есть при уровне FATAL будут откидываться все типы кроме fatal.

Линки

http://www.mkyong.com/logging/log4j-hello-world-example

Полезные команды

Ctrl+Alt+B — в эклипсе над полем редактирования кода появляется местонахождение текущего класса.

Поделиться в социальных сетях

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *