log4j2需引入log4j-api和log4j-core两个maven依赖,配置文件默认为log4j2.xml并置于src/main/resources下,核心由logger、appender、layout三要素构成,日志级别从低到高为all/trace/debug/info/warn/error/fatal/off。

Log4j 是 Java 项目中最常用、最成熟的日志框架之一,安装简单、配置灵活,不改代码就能控制日志输出行为。掌握基础安装和核心配置,是每个 Java 开发者日常开发的必备技能。
引入 Log4j 依赖
Log4j 2.x 需同时引入 API 和实现模块,推荐使用 Maven 管理依赖:
- log4j-api:提供日志接口(Logger、Level 等)
- log4j-core:提供具体实现(Appender、Layout、异步支持等)
在 pom.xml 中添加:
<dependency><groupid>org.apache.logging.log4j</groupid><artifactid>log4j-api</artifactid><version>2.20.0</version></dependency><dependency><groupid>org.apache.logging.log4j</groupid><artifactid>log4j-core</artifactid><version>2.20.0</version></dependency>
注意:避免混用旧版 log4j 1.x(已停止维护且存在严重安全漏洞),务必使用 2.x 最新稳定版。
配置文件放在正确位置
Log4j 2 默认自动加载 classpath 下的配置文件,优先级从高到低为:
- log4j2-test.xml(测试环境)
- log4j2.xml(生产推荐)
- log4j2.json / log4j2.yaml(可选格式)
- log4j2.properties(兼容性好,但功能略受限)
文件必须放在 src/main/resources/ 目录下,否则无法识别。常见错误是放错路径或命名不规范(如写成 log4j.xml 或 log4j2.conf)。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
三要素配置:Logger、Appender、Layout
所有配置都围绕这三个核心组件展开:
-
Logger:按类或包名定义日志入口,例如
LogManager.getLogger(OrderService.class) - Appender:指定日志输出目标,如控制台(Console)、文件(File)、滚动文件(RollingFile)
-
Layout:定义日志格式,常用 PatternLayout,支持占位符如
%d{HH:mm:ss}、%level、%c{1}、%msg
一个最小可用的 log4j2.xml 示例:
<configuration status="WARN"><appenders><console name="Console" target="SYSTEM_OUT"><patternlayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %c{1} - %msg%n"></patternlayout></console></appenders><loggers><root level="info"><appenderref ref="Console"></appenderref></root></loggers></configuration>
日志级别与分级控制
Log4j 支持七种标准级别(从低到高):ALL → TRACE → DEBUG → INFO → WARN → ERROR → FATAL → OFF。实际项目中常用:
- DEBUG:仅开发/测试启用,记录详细流程,如参数值、分支判断
- INFO:关键业务节点,如“订单创建成功”“用户登录完成”
- WARN:潜在问题但不影响主流程,如降级调用、配置缺失
-
ERROR:异常发生且需人工介入,必须带异常堆栈(
logger.error("xxx", e))
可通过配置动态调整级别,例如将某个模块设为 DEBUG 而整体保持 INFO:
<logger name="com.example.service" level="debug" additivity="false"><appenderref ref="Console"></appenderref></logger>
配置不是越复杂越好,先跑通控制台输出,再逐步加文件、滚动、异步等能力。关键是理解三要素之间的关系,而不是死记模板。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










