Selenium日志级别配置求助:如何将日志设为INFO级别?
解决Selenium日志级别配置问题
针对你遇到的Selenium日志级别配置问题,结合你提到的DesiredCapabilities方向,我整理了几个可行的解决方案,帮你实现「Throwable写入文件、Selenium请求INFO输出到控制台」的需求:
一、为什么WebDriver.setLogLevel(Level.INFO)不生效?
这个方法是Selenium 4+引入的统一日志级别设置API,但部分浏览器驱动(比如ChromeDriver、GeckoDriver)并没有完全兼容这个全局设置,它们更依赖各自的Capabilities配置来控制日志输出级别,所以我们需要结合浏览器专属的配置项来调整。
二、通过DesiredCapabilities配置浏览器驱动日志级别
不同浏览器的配置键值有所不同,以下是主流浏览器的具体配置方式:
1. Chrome/Edge(Chromium内核)
使用goog:loggingPrefs作为配置键,指定日志类型对应的级别:
import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import java.util.HashMap; import java.util.Map; public class SeleniumLogConfig { public static void main(String[] args) { ChromeOptions options = new ChromeOptions(); Map<String, Object> loggingPrefs = new HashMap<>(); // 设置driver类型的日志级别为INFO(对应Selenium请求相关日志) loggingPrefs.put("driver", "INFO"); // 如果需要浏览器端的日志,可添加"browser": "INFO" options.setCapability("goog:loggingPrefs", loggingPrefs); DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(ChromeOptions.CAPABILITY, options); // 初始化Driver WebDriver driver = new ChromeDriver(caps); } }
2. Firefox
使用moz:firefoxOptions配置日志级别,也可以直接用FirefoxOptions的专属方法:
import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxDriverLogLevel; import org.openqa.selenium.remote.DesiredCapabilities; public class SeleniumLogConfig { public static void main(String[] args) { FirefoxOptions options = new FirefoxOptions(); // 直接设置日志级别为INFO options.setLogLevel(FirefoxDriverLogLevel.INFO); DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options); WebDriver driver = new FirefoxDriver(caps); } }
3. Safari
通过SafariOptions的setLoggingPrefs方法配置:
import org.openqa.selenium.safari.SafariOptions; import java.util.HashMap; import java.util.Map; public class SeleniumLogConfig { public static void main(String[] args) { SafariOptions options = new SafariOptions(); Map<String, String> loggingPrefs = new HashMap<>(); loggingPrefs.put("driver", "INFO"); options.setLoggingPrefs(loggingPrefs); WebDriver driver = new SafariDriver(options); } }
三、配合Logback.xml实现日志分流需求
完成驱动配置后,还需要在logback.xml中设置日志的输出规则,确保Throwable写入文件、Selenium请求INFO输出到控制台:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 1. 文件Appender:记录所有日志(包括Throwable) --> <appender name="FILE_APPENDER" class="ch.qos.logback.core.FileAppender"> <file>application.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%ex</pattern> <!-- %ex 用于输出Throwable的堆栈信息 --> </encoder> </appender> <!-- 2. 控制台Appender:仅输出Selenium的INFO级日志 --> <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender"> <!-- 过滤仅保留org.openqa.selenium包的日志 --> <filter class="ch.qos.logback.classic.filter.LoggerFilter"> <loggerName>org.openqa.selenium</loggerName> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <!-- 过滤仅保留INFO级别日志 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- Root日志:默认输出所有日志到文件 --> <root level="DEBUG"> <appender-ref ref="FILE_APPENDER" /> </root> <!-- 单独配置Selenium日志:级别为INFO,输出到控制台,禁止重复输出到文件 --> <logger name="org.openqa.selenium" level="INFO" additivity="false"> <appender-ref ref="CONSOLE_APPENDER" /> </logger> </configuration>
这里的additivity="false"很关键,它可以避免Selenium的日志同时被Root的文件Appender重复记录,确保Selenium日志只输出到控制台。
四、验证配置效果
启动项目后,你可以:
- 查看
application.log文件,里面会包含所有日志信息,包括Throwable的堆栈 - 查看控制台,只会输出
org.openqa.selenium包下的INFO级日志,也就是你需要的Selenium请求相关内容
内容的提问来源于stack exchange,提问作者Pavel
相关产品推荐
相关产品推荐

