package com.mkyong;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorld {
private static final Logger logger = LogManager.getLogger(HelloWorld.class);
public static void main(String[] args) {
logger.debug("Hello from Log4j 2");
// in old days, we need to check the log level to increase performance
/*if (logger.isDebugEnabled()) {
logger.debug("{}", getNumber());
}*/
// with Java 8, we can do this, no need to check the log level
logger.debug("{}", () -> getNumber());
}
static int getNumber() {
return 5;
}
}
5.1 Мы можем изменить статус на “трассировка”, “отладка”, “информация”, “предупреждение”, “ошибка” и “фатальный”, чтобы включить внутренние события Log4j, он отобразит много полезных журналов для компонентов Log4j. Прочитайте это для Конфигурации Log4j
6. Log4j Лог4j 2 Приложения
Некоторые из распространенных приложений Log4j.
6.1 Приложение для консоли
6.2 Приложение для файлов
%d %p %c{1.} [%t] %m%n
6.3 RollingFileAppender – Поворачивать файлы журналов ежедневно или при размере файла > 10 МБ.
%d %p %c{1.} [%t] %m%n
По умолчанию он создаст до 7 архивов в один и тот же день.
Мы можем переопределить архивы по умолчанию 7 с помощью этой DefaultRolloverStrategy
%d %p %c{1.} [%t] %m%n
6.4 Приложение RollingRandomAccessFileAppender – Похоже на RollingFileAppender , но быстрее.
%d %p %c{1.} [%t] %m%n
6.5 AsyncAppender – Сделать приложение асинхронным. Увеличьте производительность.
%d %p %c{1.} [%t] %m%n
6.6 SMTPAppender – Нужно javax.mail отправить электронное письмо.
com.sun.mailjavax.mail1.6.2
%d %p %c{1.} [%t] %m%n
Имитировать ошибку
package com.mkyong;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloWorldError {
private static final Logger logger = LogManager.getLogger(HelloWorldError.class);
public static void main(String[] args) {
try {
System.out.println(getData());
} catch (IllegalArgumentException e) {
logger.error("{}", e);
}
}
static int getData() throws IllegalArgumentException {
throw new IllegalArgumentException("Sorry IllegalArgumentException!");
}
}
Образец электронного письма
7. Асинхронные регистраторы
7.1 Чтобы включить асинхронность всех регистраторов, нам нужно 2 вещи:
Разрушитель 3 присутствует в пути к классу проекта.
7.2 Если мы попытаемся настроить 7.2 Если мы попытаемся настроить и разрушитель отсутствует в пути к классу, он выдаст следующее сообщение об ошибке:
$ mvn clean package
$ mvn -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar target\log4j2-1.0.jar
java.lang.NoClassDefFoundError: com/lmax/disruptor/EventTranslatorVararg
at java.lang.ClassLoader.defineClass1 (Native Method)
at java.lang.ClassLoader.defineClass (ClassLoader.java:1009)
at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:174)
at java.net.URLClassLoader.defineClass (URLClassLoader.java:545)
at java.net.URLClassLoader.access$100 (URLClassLoader.java:83)
at java.net.URLClassLoader$1.run (URLClassLoader.java:453)
7.3 Чтобы исправить это, добавьте разрушитель
com.lmaxdisruptor3.4.2
7.4 Запустите его снова, с конфигурацией Log4j 2 в состоянии debug .
Асинхронные регистраторы
$ java -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar target\log4j2-1.0.jar
2019-03-25 21:11:23,919 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09
2019-03-25 21:11:23,921 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=AsyncLoggerRingBuffer
2019-03-25 21:11:23,921 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=StatusLogger
2019-03-25 21:11:23,922 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=ContextSelector
2019-03-25 21:11:23,923 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Loggers,name=
2019-03-25 21:11:23,923 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Loggers,name=com.mkyong
2019-03-25 21:11:23,924 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Appenders,name=LogToConsole
2019-03-25 21:11:23,924 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Appenders,name=LogToRollingFile
//...
2019-03-25 21:11:24,020 pool-1-thread-1 DEBUG Stopped LoggerContext[name=AsyncContext@464bee09, org.apache.logging.log4j.core.async.AsyncLoggerContext@45fd9a4d] with
Синхронные регистраторы
2019-03-25 21:12:49,432 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=StatusLogger
2019-03-25 21:12:49,433 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=ContextSelector
2019-03-25 21:12:49,433 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Loggers,name=
2019-03-25 21:12:49,434 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Loggers,name=com.mkyong
2019-03-25 21:12:49,435 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Appenders,name=LogToConsole
2019-03-25 21:12:49,435 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Appenders,name=LogToRollingFile
//...
2019-03-25 21:12:49,449 pool-1-thread-1 DEBUG Stopped LoggerContext[name=57baeedf, org.apache.logging.log4j.core.LoggerContext@4ed5eb72] with status true
8. Смешивание синхронных и Асинхронных регистраторов