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:log4jjar包,要是有,在对应依赖里手动排除 - 确保
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
相关产品推荐
相关产品推荐

