Apache Log4j2是Log4j的升级版,参考了logback一些优秀的设计,并且修复了logback的一些问题,而且性能上也有了重大提升,主要有:
虽然Log4j2既是日志门面,也是日志框架。但还是推荐使用流行的日志门面slf4j + 功能强大且性能优越的日志框架log4j2
在pom.xml添加依赖
org.apache.logging.log4j
log4j-api
2.18.0
org.apache.logging.log4j
log4j-core
2.18.0
程序如下:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log4j2Test {
public static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class);
public static void main(String[] args) {
// 默认只打印error及以上级别的日志
LOGGER.fatal("fatal");
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
运行程序,结果如下:
17:51:14.737 [main] FATAL Log4j2Test - fatal
17:51:14.744 [main] ERROR Log4j2Test - error
默认只打印error及以上级别的日志。后面可以通过log4j2.xml日志配置文件进行日志级别和日志输出格式的配置
在pom.xml添加依赖
org.apache.logging.log4j
log4j-api
2.18.0
org.apache.logging.log4j
log4j-core
2.18.0
org.slf4j
slf4j-api
1.7.36
org.apache.logging.log4j
log4j-slf4j-impl
2.18.0
程序如下:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4j2Test {
public final static Logger LOGGER = LoggerFactory.getLogger(Log4j2Test.class);
public static void main(String[] args) {
// 默认只打印error级别的日志
LOGGER.error("error");
LOGGER.warn("warn");
LOGGER.info("info");
LOGGER.debug("debug");
LOGGER.trace("trace");
}
}
运行程序,结果如下:
18:07:44.628 [main] ERROR Log4j2Test - error
默认只打印error级别的日志。后面可以通过log4j2.xml日志配置文件进行日志级别和日志输出格式的配置
在classpath,比如resources目录下,新建log4j2.xml日志配置文件。内容如下:
C:/Users/dell/Desktop/java11Test/logs
同步日志处理流程图如下:
log4j2的异步日志带来了很大的性能提升。为了实现异步日志需要在pom.xml添加如下依赖:
com.lmax
disruptor
3.4.4
提供了两种异步日志实现方法,一个是AsyncLogger(对应Logger组件,推荐使用),一个是AsyncAppender(对应Appender组件)
log4j2的全局异步AsyncLogger性能最好,第二个是混合异步AsyncLogger,性能最差的是AsyncAppender(和同步日志相比没有什么性能提升。和logback性能一样)
如果使用异步日志,全局异步AsyncLogger、混合异步AsyncLogger、AsyncAppender,不要同时使用。否则会使用性能较低的一种异步方式
所有appender的所有日志级别的日志都异步的记录,不需要改动log4j2.xml配置文件。只需要在classpath,比如resources目录下,新建log4j2.component.properties配置文件。内容如下:
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
可以同时使用同步日志和异步日志,这使得日志的配置方式更加灵活
log4j2.xml配置如下:
C:/Users/dell/Desktop/java11Test/logs
输出如下:
2022-07-10 15:55:23.037 [main] [ERROR] --- error
2022-07-10 15:55:23.039 [main] [WARN ] --- warn
可以看到打印了WARN级别的日志,且没有打印日志执行的位置信息
log4j2.xml配置如下:
C:/Users/dell/Desktop/java11Test/logs