
Що потрібно звантажити
* Apache Log4j 2 з оф. сайту (http://logging.apache.org/log4j/2.x/download.html)
* Log4j 2 User’s Guide – посібник користувача (http://logging.apache.org/log4j/2.x/log4j-users-guide.pdf)
* SLF4J – це бібліотека для логування на якій базується log4j 2 (http://www.slf4j.org/download.html)
Підключення бібліотек
Для того щоб наші приклади працювали. Необхідно підключити відповідні *.jar файли до проекту. Не буду пояснювати як це робити.
Розархівовуємо вміст архівів звантажених з інтернету і з них я підключав наступні:
log4j2.0\log4j-api-2.0-rc1.jar
log4j2.0\log4j-core-2.0-rc1.jar
log4j2.0\log4j-slf4j-impl-2.0-rc1.jar
slf4j-1.7.7\integration\lib\slf4j-api-2.0.99.jar
slf4j-1.7.7\integration\lib\slf4j-simple-1.6.99.jar
Якщо не підключити slf4j, то буде видавати помилку виду:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/ILoggerFactory at java.lang.ClassLoader.defineClass1(Native Method)...........
Конфігурація Log4j 2
Для того щоб логування працювало як нам потрібно необхідний відповідний файл конфігурації. Можна створити .xml файл, а можна файл properties. Приклади файлів конфігурації можна знайти в посібнику (User’s Guid). Файл повинен бути прописаний в classpath проекту. Можна просто закинути файл у корінь проекту, або у каталог src. Файл конфігурації краще назвати log4j2.xml.
У посібнику користувача можна знайти різні приклади файлу конфігурації для різних цілей: виводу лише на консоль, виводу у файл, виводу у мережевий сокет і т.д. Для виводу у файл матимемо:
<configuration> <appenders> <file append="false" filename="A1.log" name="A1"> <patternlayout pattern="%t %-5p %c{6} - %m%n"> </patternlayout></file> <console name="STDOUT" target="SYSTEM_OUT"> <patternlayout pattern="%d %-5p [%t] %C{6} %M (%F:%L) - %m%n"> </patternlayout></console> </appenders> <loggers> <logger level="debug" name="org.apache.log4j.xml"> <appenderref ref="A1"> </appenderref></logger> <root level="debug"> <appenderref ref="STDOUT"> </appenderref></root> </loggers> </configuration>
Наступний приклад демонструє роботу з логуванням.
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class HelloWorld { private static Logger logger = LogManager.getLogger("HelloWorld"); public static void main(String[] args) { logger.info("Hello, world"); Logger fileLog=LogManager.getLogger("org.apache.log4j.xml"); fileLog.debug("Write in file!"); } }В результаті, якщо був використатий файл конфігурації наведений вище, то на консолі отримаємо:
2014-06-10 15:04:31,610 INFO [main] HelloWorld (HelloWorld.java:8) - Hello, world 2014-06-10 15:04:31,612 DEBUG [main] HelloWorld (HelloWorld.java:11) - Write in file!А у файлі:
main DEBUG log4j.xml - Write in file!Спочатку отримуємо наш основний «Логер», який направлений буде на консоль.
private static Logger logger = LogManager.getLogger("HelloWorld");
Якщо ми хочемо писати у файл щось, то отримуємо логер для файлу:
Logger fileLog=LogManager.getLogger("org.apache.log4j.xml");
І пишемо у файл:
fileLog.debug("Write in file!");
Те як виглядатими наш лог, що туди включатиметься в значній мірі залежить від файла конфігурації.
Можливі передачі у лог і винятків (Exception):
logger.info("Error: ", new Exception("An exception"));
Рівні логування
Не хочеться вдаватися глибоко у цю тему, але необхідно згадати основне. При логуванні розрізняють рівні логування:
1. TRACE – повідомлення найвищого рівні
2. DEBUG – зневаджувальні повідомлення, менш детальні ніж TRACE
3. INFO – стандартні інформаційні повідомлення
4. WARN – некритичні помилки
5. ERROR – помилки, що можуть вплинути на правильність результату
6. FATAL – фатальні помилки, які заважають роботі
За допомогою файлу конфігурації ми можемо вказати, які повідомлення включати у наш лог. У нас у файлі конфігурації маємо level="debug" . Це означає що на консоль і у файл буде виводитися всі повідомлення рівня Debug і нижче. Повідомлення рівні trace не будуть включатися. Тобто рядок в коді logger.trace("Hello, world"); - нам нічого не виведе ні в лог, ні у файл, ні на консоль, якщо ми не підвищемо рівень логування до TRACE у файлі конфігурації.
Патерни логування
Для формування вигляду логу, використовується відповідний патерн або ж шаблон. У нас використано два патерни, один для файлу інший для консолі.
<PatternLayout pattern="%t %-5p %c{2} - %m%n" />
<PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
%d – вивести дату
%t – ім’я нитки (thread)
%-5p — виводить рівень логу (ERROR, DEBUG, INFO …), цифра 5 означає, що для виводу використовується 5 символів , (-), те що вирівнювання буде відбуватися по лівій стороні
%c{1} — виводить назву логера, у фігурних дужках регулюється наскільки повною видаватиметься назва
%L —номер рядка, в якій відбувася виклик запису у лог
%m — повідомлення, що було передано в лог
%n — перехід на новий рядок
Усе це детальніше подато у посібнику користувача.