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

Apache Solr 5.4项目Log4j 1.x升级至2.18.0求助

Apache Solr 5.4.0 升级 Log4j2 实操方案

一、POM依赖调整(核心步骤)

直接硬排Log4j1会触发Level类异常,是因为Solr 5.4内部有直接调用Log4j1 API的代码,得用桥接+兼容包的组合方案,具体配置如下:

<!-- 排除Solr自带的Log4j1实现和SLF4J-Log4j12绑定 -->
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-core</artifactId>
    <version>5.4.0</version>
    <exclusions>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 引入Log4j2兼容栈 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.12</version> <!-- 严格匹配Solr 5.4.0自带的SLF4J版本,避免冲突 -->
</dependency>
<!-- Log4j官方提供的Log4j1 API兼容包,解决Level类内部访问问题 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.17.1</version> <!-- 选无漏洞的稳定版本,比如2.17.1及以上 -->
</dependency>
<!-- SLF4J绑定到Log4j2的实现 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.17.1</version>
    <scope>runtime</scope>
</dependency>
<!-- Log4j2核心包 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version>
    <scope>runtime</scope>
</dependency>

二、解决Level类内部访问异常

如果还是出现这个异常,做两个检查:

  • 用mvn dependency:tree排查依赖,确保没有残留的log4j:log4j jar包,要是有,在对应依赖里手动排除
  • 确保log4j-1.2-api在类路径中的加载优先级最高,比如在POM里把它放在所有日志相关依赖的最前面

三、日志配置文件替换

Solr默认的log4j.properties要换成Log4j2的配置文件,推荐用log4j2.xml(功能更全),放在项目的src/main/resources下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <!-- 滚动文件日志 -->
        <RollingFile name="RollingFile" fileName="logs/solr.log"
                     filePattern="logs/solr-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d{ISO8601} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="100MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
        <!-- Solr专属日志配置,可调整级别 -->
        <Logger name="org.apache.solr" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </Loggers>
</Configuration>

删除原来的log4j.properties,避免配置冲突。

四、验证升级效果

  • 启动项目,检查控制台和日志文件的输出是否正常
  • 用mvn dependency:tree | grep log4j确认只有Log4j2相关的依赖存在,没有Log4j1的实现包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:02:17