Java日志系统log4j2的使用配置和异步日志使用
目录
- 1. log4j2
-
- 1.1 log4j2介绍
- 1.2 Log4j2入门
-
- 1.2.1 log4j2(日志门面 + 日志框架)使用
- 1.2.2 slf4j + log4j2使用
- 1.3 Log4j2配置
- 1.4 Log4j2异步日志
-
- 1.4.1 全局异步AsyncLogger
- 1.4.2 混合异步AsyncLogger
- 1.4.3 AsyncAppender
1. log4j2
1.1 log4j2介绍
Apache Log4j2是Log4j的升级版,参考了logback一些优秀的设计,并且修复了logback的一些问题,而且性能上也有了重大提升,主要有:
- log4j2对Appender提供了一些异常处理机制
- 参考了logback的设计,提供自动刷新参数配置,可以自动重载配置而不用重启应用
- log4j2利用缓冲区和重用对象,几乎不会产生临时对象,从而实现无垃圾机制
1.2 Log4j2入门
虽然Log4j2既是日志门面,也是日志框架。但还是推荐使用流行的日志门面slf4j + 功能强大且性能优越的日志框架log4j2
1.2.1 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日志配置文件进行日志级别和日志输出格式的配置
1.2.2 slf4j + log4j2使用
在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日志配置文件进行日志级别和日志输出格式的配置
1.3 Log4j2配置
在classpath,比如resources目录下,新建log4j2.xml日志配置文件。内容如下:
C:/Users/dell/Desktop/java11Test/logs
1.4 Log4j2异步日志
同步日志处理流程图如下:
异步日志处理流程图如下:
log4j2的异步日志带来了很大的性能提升。为了实现异步日志需要在pom.xml添加如下依赖:
com.lmax
disruptor
3.4.4
提供了两种异步日志实现方法,一个是AsyncLogger(对应Logger组件,推荐使用),一个是AsyncAppender(对应Appender组件)
log4j2的全局异步AsyncLogger性能最好,第二个是混合异步AsyncLogger,性能最差的是AsyncAppender(和同步日志相比没有什么性能提升。和logback性能一样)
如果使用异步日志,全局异步AsyncLogger、混合异步AsyncLogger、AsyncAppender,不要同时使用。否则会使用性能较低的一种异步方式
1.4.1 全局异步AsyncLogger
所有appender的所有日志级别的日志都异步的记录,不需要改动log4j2.xml配置文件。只需要在classpath,比如resources目录下,新建log4j2.component.properties配置文件。内容如下:
Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
1.4.2 混合异步AsyncLogger
可以同时使用同步日志和异步日志,这使得日志的配置方式更加灵活
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级别的日志,且没有打印日志执行的位置信息
1.4.3 AsyncAppender
log4j2.xml配置如下:
C:/Users/dell/Desktop/java11Test/logs
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/e8db3b7d36.html
