首先引入Log4j2依赖并创建log4j2.xml配置文件,接着在代码中通过LogManager获取Logger实例记录日志,最后引入Disruptor库并配置AsyncRoot启用异步日志以提升性能。

在Java项目中配置Log4j2,可以实现高性能、灵活的日志输出管理。相比Log4j 1.x,Log4j2提供了更好的异步日志支持、更丰富的配置方式以及更强的插件机制。以下是详细配置步骤和实用建议。
引入Log4j2依赖
使用Maven构建项目时,在pom.xml中添加Log4j2核心依赖:
org.apache.logging.log4j log4j-core 2.20.0 org.apache.logging.log4j log4j-api 2.20.0
如果你使用了SLF4J作为门面,还需加入log4j-slf4j-impl桥接包,避免冲突。
创建log4j2.xml配置文件
将配置文件放在src/main/resources目录下,命名为log4j2.xml。以下是一个典型配置示例:
立即学习“Java免费学习笔记(深入)”;
zuojiankuohaophpcn!-- 按天滚动的日志文件 --youjiankuohaophpcn zuojiankuohaophpcnRollingFile name="FileAppender" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log.gz"youjiankuohaophpcn zuojiankuohaophpcnPatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/youjiankuohaophpcn zuojiankuohaophpcnPoliciesyoujiankuohaophpcn zuojiankuohaophpcnTimeBasedTriggeringPolicy interval="1"/youjiankuohaophpcn zuojiankuohaophpcnSizeBasedTriggeringPolicy size="10MB"/youjiankuohaophpcn zuojiankuohaophpcn/Policiesyoujiankuohaophpcn zuojiankuohaophpcnDefaultRolloverStrategy max="10"/youjiankuohaophpcn zuojiankuohaophpcn/RollingFileyoujiankuohaophpcn zuojiankuohaophpcn/Appendersyoujiankuohaophpcn zuojiankuohaophpcnLoggersyoujiankuohaophpcn zuojiankuohaophpcn!-- 自定义Logger,可控制特定包的日志级别 --youjiankuohaophpcn zuojiankuohaophpcnLogger name="com.example.service" level="DEBUG" additivity="false"youjiankuohaophpcn zuojiankuohaophpcnAppenderRef ref="FileAppender"/youjiankuohaophpcn zuojiankuohaophpcn/Loggeryoujiankuohaophpcn zuojiankuohaophpcn!-- 根Logger --youjiankuohaophpcn zuojiankuohaophpcnRoot level="INFO"youjiankuohaophpcn zuojiankuohaophpcnAppenderRef ref="Console"/youjiankuohaophpcn zuojiankuohaophpcnAppenderRef ref="FileAppender"/youjiankuohaophpcn zuojiankuohaophpcn/Rootyoujiankuohaophpcn zuojiankuohaophpcn/Loggersyoujiankuohaophpcn
说明:
- status="WARN":只输出Log4j自身运行时的警告或错误信息,避免干扰业务日志。
- Console Appender:输出到控制台,适合开发调试。
- RollingFile Appender:按时间和大小滚动日志文件,自动压缩旧日志。
- Logger层级:可为不同包设置不同日志级别,实现精细化控制。
代码中使用日志
在Java类中通过LogManager获取Logger实例:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;public class UserService { private static final Logger logger = LogManager.getLogger(UserService.class);
public void saveUser(String name) { logger.info("开始保存用户: {}", name); if (name == null) { logger.error("用户名不能为空"); } logger.debug("用户数据校验通过"); }}
注意使用占位符{}拼接变量,避免字符串拼接性能损耗。
启用异步日志提升性能
Log4j2支持高性能异步日志,需引入LMAX Disruptor库:
com.lmax disruptor 3.4.4 然后在log4j2.xml中启用异步根Logger:
异步日志能显著降低日志写入对主线程的阻塞,尤其适用于高并发场景。
基本上就这些。合理配置Log4j2,不仅能清晰记录系统运行状态,还能在生产环境中有效减少日志对性能的影响。关键是根据实际需求调整输出格式、滚动策略和日志级别。不复杂但容易忽略细节。











