ChromeDriver为何持续输出日志至控制台?Java自动化测试项目日志配置求助
我来帮你搞定这俩头疼的问题:ChromeDriver日志顽固输出到控制台,还有log4j的警告提示,一步步来:
ChromeDriver的日志是直接输出到系统的stdout/stderr的,默认不会集成到你的log4j体系里,所以得专门给它配置日志路径:
在初始化ChromeDriver之前,先设置系统属性指定日志文件,再配合ChromeOptions调整日志级别:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import com.google.common.collect.ImmutableMap; public class TestDriver { public static void main(String[] args) { // 1. 指定ChromeDriver日志文件路径,替换成你实际的路径 System.setProperty("webdriver.chrome.logfile", "/your/project/path/chromedriver.log"); // 2. 配置日志级别(可选,比如DEBUG/INFO/WARNING/SEVERE) ChromeOptions options = new ChromeOptions(); options.setCapability("goog:loggingPrefs", ImmutableMap.of("driver", "INFO")); // 3. 初始化Driver WebDriver driver = new ChromeDriver(options); // 后续测试代码... } }
注意:Windows系统的路径要转义,比如"C:\\test-logs\\chromedriver.log"。配置完之后,ChromeDriver启动的那段日志就会乖乖跑到你指定的文件里,不会再占控制台了。
这个警告是说log4j找不到可用的日志输出器(appender),大概率是你的log4j2配置文件有问题,或者没放到正确的位置:
第一步:检查配置文件位置
确保你的log4j2配置文件(比如log4j2.xml或者log4j2.properties)放在项目的src/main/resources目录下(Maven/Gradle项目),这样才能被类路径加载到。
第二步:完善配置文件内容
给你一个简单可用的log4j2.xml示例,包含文件输出和控制台输出,还专门处理了org.apache.http的日志:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <!-- 定义日志输出器 --> <Appenders> <!-- 文件输出器:把日志写到application.log里 --> <File name="FileAppender" fileName="logs/application.log" append="false"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> <!-- 控制台输出器(可选,如果你还需要控制台日志的话) --> <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="FileAppender"/> <AppenderRef ref="Console"/> </Root> <!-- 单独处理org.apache.http的日志,避免过多冗余日志 --> <Logger name="org.apache.http" level="warn" additivity="false"> <AppenderRef ref="FileAppender"/> </Logger> </Loggers> </Configuration>
如果用的是log4j2.properties格式,对应的配置大概是这样:
status = warn name = PropertiesConfig appenders = console, file appender.console.type = Console appender.console.name = ConsoleAppender appender.console.layout.type = PatternLayout appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n appender.file.type = File appender.file.name = FileAppender appender.file.fileName = logs/application.log appender.file.layout.type = PatternLayout appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n loggers = http logger.http.name = org.apache.http logger.http.level = warn logger.http.additivity = false logger.http.appenderRefs = file logger.http.appenderRef.file.ref = FileAppender rootLogger.level = info rootLogger.appenderRefs = console, file rootLogger.appenderRef.console.ref = ConsoleAppender rootLogger.appenderRef.file.ref = FileAppender
第三步:确认依赖正确
如果你用的是slf4j绑定log4j2,要确保Maven/Gradle里的依赖没有冲突,比如Maven依赖:
<dependencies> <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <!-- Log4j2 对SLF4J的实现 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.2</version> </dependency> <!-- Log4j2 核心包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.2</version> </dependency> </dependencies>
做完这些配置后,重启你的项目,ChromeDriver的日志会写入指定文件,log4j的警告也应该消失了。
内容的提问来源于stack exchange,提问作者EliteRaceElephant

