You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SBT中排除存在漏洞的log4j 1.2.17传递依赖方法咨询

替换Log4j 1.2.17为2.17.0的解决方案

针对你的SBT 0.13.11 + Play框架应用,要彻底替换存在漏洞的Log4j 1.2.17,需要完成以下几步:

1. 全局排除Log4j 1.x与Play默认Logback依赖

在build.sbt中添加全局排除规则,彻底移除旧版Log4j和Play自带的Logback(避免日志框架冲突):

// 全局排除所有Log4j 1.x依赖
excludeDependencies += ExclusionRule(organization = "log4j", name = "log4j")

// 移除Play核心依赖中的Logback组件
libraryDependencies ++= Seq(javaJdbc, cache, javaWs, filters).map(
  _.exclude("ch.qos.logback", "logback-classic")
   .exclude("ch.qos.logback", "logback-core")
)

2. 添加Log4j 2.17.0核心依赖与桥接包

引入Log4j2的核心组件,同时添加适配旧代码和Play日志体系的桥接包,确保原有日志代码无需修改即可运行:

libraryDependencies ++= Seq(
  // Log4j2核心API与实现
  "org.apache.logging.log4j" % "log4j-api" % "2.17.0",
  "org.apache.logging.log4j" % "log4j-core" % "2.17.0",
  // 桥接Log4j 1.x API到Log4j2(兼容旧代码中的Log4j1调用)
  "org.apache.logging.log4j" % "log4j-1.2-api" % "2.17.0",
  // 桥接SLF4J到Log4j2(适配Play默认的SLF4J日志接口)
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.17.0"
)

3. 强制覆盖依赖版本(杜绝遗漏)

通过dependencyOverrides强制确保所有传递依赖中不会出现旧版Log4j:

dependencyOverrides += "log4j" % "log4j" % "2.17.0"
dependencyOverrides ++= Seq(
  "org.apache.logging.log4j" % "log4j-api" % "2.17.0",
  "org.apache.logging.log4j" % "log4j-core" % "2.17.0"
)

4. 添加Log4j2配置文件

在项目conf目录下创建log4j2.xml(替换原有的logback.xml),配置日志输出格式与目标:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
        <!-- 适配Play框架日志分类 -->
        <Logger name="play" level="info"/>
        <Logger name="application" level="info"/>
    </Loggers>
</Configuration>

5. 配置Play使用Log4j2

在conf/application.conf中添加配置,指定Play使用Log4j2作为日志实现:

# 指定Log4j2为日志工厂
logger.factory="org.apache.logging.log4j.jul.LogManagerFactory"
play.logger="org.apache.logging.log4j.slf4j.Log4jLoggerFactory"

验证替换结果

执行SBT命令检查依赖树,确认Log4j 1.2.17已被完全替换:

sbt dependencyTree | grep log4j

输出应仅包含org.apache.logging.log4j相关的2.17.0版本依赖,无log4j:log4j:1.2.17条目。

内容的提问来源于stack exchange,提问作者Krishna Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:27:03