0

0

如何在Java中设置日志工具环境_Log4j与SLF4J配置解析

P粉602998670

P粉602998670

发布时间:2026-01-14 12:20:03

|

562人浏览过

|

来源于php中文网

原创

Log4j与SLF4J是分层协作关系:SLF4J为日志门面API,Log4j2为实现;需通过log4j-slf4j2-impl绑定,排除旧版冲突包,并正确配置log4j2.yaml等文件于resources下。

如何在java中设置日志工具环境_log4j与slf4j配置解析

Log4j 和 SLF4J 不是“二选一”的关系,而是分层协作:SLF4J 是日志门面(API),Log4j2(注意不是 Log4j 1.x)才是真正的日志实现。直接用 Log4j 1.x 已不安全,Log4j 2.17.0+ 才修复了严重 RCE 漏洞;而 SLF4J 本身不输出日志,必须绑定一个具体实现(如 log4j-slf4j2-impl)。

为什么不能直接依赖 log4j-api + log4j-core 而跳过 SLF4J?

多数主流框架(Spring Boot、Apache Commons、Hibernate)默认使用 SLF4J 接口打日志。如果你项目里只引入 log4j-apilog4j-core,但框架内部调用的是 org.slf4j.Logger,就会触发 NoClassDefFoundError: org/slf4j/Logger 或静默失效——因为没桥接。

正确做法是:

  • 声明 slf4j-api 为 compile 依赖(所有代码写 org.slf4j.LoggerFactory.getLogger(...)
  • 选一个 binding 实现,比如 log4j-slf4j2-impl(对应 Log4j2)
  • 同时引入 log4j-corelog4j-slf4j2-impl 不含它,会报 NoClassDefFoundError: org/apache/logging/log4j/core/Appender
  • 务必排除掉旧的 slf4j-log4j12log4j-1.2.17 等冲突包(Maven 中用

Log4j2 的配置文件名和位置怎么才生效?

Log4j2 默认按固定顺序查找配置文件,名称或后缀不对就退回到控制台简单输出(ConsoleAppender 且无格式),你以为配好了,其实根本没加载。

立即学习Java免费学习笔记(深入)”;

有效配置路径与优先级(从高到低):

  • log4j2-test.yaml / log4j2-test.yml(测试环境优先)
  • log4j2-test.json / log4j2-test.jsn
  • log4j2-test.xml
  • log4j2.yaml / log4j2.yml(推荐,YAML 更易读)
  • log4j2.json / log4j2.jsn
  • log4j2.xml

必须放在 src/main/resources/ 下(或 classpath 根目录)。如果用 Maven 多模块,确认该资源被最终打包进 jar 的 BOOT-INF/classes/(Spring Boot)或根目录。

Removal.AI
Removal.AI

AI移出图片背景工具

下载

SLF4J 绑定冲突导致 “Multiple bindings” 警告怎么办?

运行时看到类似警告:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/.../log4j-slf4j2-impl-2.20.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/.../slf4j-simple-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]

说明 classpath 里混入了多个 SLF4J binding(如 slf4j-simpleslf4j-log4j12logback-classic)。SLF4J 会随机选一个,行为不可控。

排查方式:

  • Maven:执行 mvn dependency:tree -Dincludes=org.slf4j:,看哪些依赖偷偷拉了别的 binding
  • Spring Boot 项目:检查是否误加了 spring-boot-starter-log4j2spring-boot-starter-logging 共存(后者含 Logback)
  • 显式排除:在引入第三方 starter 时,用 干掉它的日志实现,例如:

  com.example
  some-lib
  
    
      org.slf4j
      slf4j-log4j12
    
  

Log4j2 异步日志为什么没生效?

想提升性能启用异步,但发现 AsyncLogger 没起作用,日志还是同步刷盘。常见原因:

  • 没加 JVM 参数:-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector(Log4j2.17+ 可省略,但低版本必须)
  • 配置中用了 但没启用 includeLocation="false"(否则每次都要取堆,失去异步意义)
  • 依赖缺失:disruptor-3.4.4.jar(Log4j2 异步核心,Maven 需显式声明,尤其 Spring Boot 2.6+ 默认不带)
  • Logger 获取方式错误:必须用 org.apache.logging.log4j.LogManager.getLogger(...),而不是 SLF4J 的 LoggerFactory(SLF4J binding 层不透传 AsyncLogger)

真正对 SLF4J 生效的异步方案,是统一用 Log4j2 做底层实现,并确保 binding 正确 —— 这样你写 LoggerFactory.getLogger(...),背后仍是 Log4j2 的异步能力。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

832

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

737

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

734

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16925

2023.08.03

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.5万人学习

C# 教程
C# 教程

共94课时 | 6.7万人学习

Java 教程
Java 教程

共578课时 | 45.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号