以Java应用运行类时出现Log4j2日志实现未找到错误求助
在Eclipse中以"Run as Java Application"运行DataDriven.java类时,出现错误提示:
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
已在pom.xml中添加/移除log4j-core依赖(版本3.0.0-beta1),问题仍未解决。
相关代码文件
DataDriven.java
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class DataDriven { public static void main(String[] args) throws FileNotFoundException { FileInputStream fis=new FileInputStream("C://Users//Shreyas Lembhe//OneDrive//Documents//DataDemo.xlsx"); XSSFWorkbook workBook=new XSSFWorkbook(); int sheets=workBook.getNumberOfSheets(); for(int i=0;i<sheets;i++) { if(workBook.getSheetName(i).equalsIgnoreCase("testdata")) { XSSFSheet sheet=workBook.getSheetAt(i); //Identify test case column by scanning the entire 1st row Iterator<Row> rows=sheet.iterator(); Row firstRow=rows.next(); Iterator<Cell> ce=firstRow.cellIterator();//Row is a collection of cells int k=0; int column = 0; while(ce.hasNext()) { Cell value=ce.next(); if(value.getStringCellValue().equalsIgnoreCase("testcases")) { column=k; } k++; } System.out.println(column); } } } }
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Framework</groupId> <artifactId>ExcelDriver</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>3.0.0-beta1</version> </dependency> </dependencies> </project>
问题原因及解决方案
1. Log4j版本不兼容
你用的log4j-core是3.0.0-beta1预览版,而Apache POI 5.2.5依赖的是Log4j 2.x系列,版本不匹配会导致类路径冲突,无法正确加载日志实现。
解决:
替换为稳定的Log4j 2.x版本,比如2.20.0,同时要加log4j-api依赖(Log4j 2.x中api和core是分离的):
<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>
2. Eclipse Maven依赖未更新
加完依赖后,Eclipse可能没自动更新类路径,导致依赖没被加载。
解决:
- 右键项目 → Maven → Update Project,勾选"Force Update of Snapshots/Releases"后点OK。
- 或者清理项目:Project → Clean,选当前项目后清理。
3. POI依赖冲突
你同时加了poi-ooxml(5.2.5)和poi-ooxml-schemas(4.1.2),版本不一致会引发依赖冲突,间接影响日志组件加载。
解决:
删掉poi-ooxml-schemas依赖,因为poi-ooxml 5.x版本已经包含了所需的schemas,不需要单独引入。
4. 缺少Log4j配置文件
Log4j 2.x需要配置文件(比如log4j2.xml、log4j2.properties)才能正常工作,不然会默认用SimpleLogger。
解决:
在src/main/resources下创建log4j2.xml文件,示例配置:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
5. 运行配置类路径问题
Eclipse的Run Configuration可能没正确包含Maven依赖。
解决:
- 打开Run Configurations → 找到你的Java Application配置 → 切换到Classpath标签页。
- 确保"Maven Dependencies"在User Entries里,如果没有,点Add → Library → Maven Dependencies添加。
内容的提问来源于stack exchange,提问作者Shreyas Lembhe

