如何在Java中屏蔽Selenium控制台不必要的Debug日志?
兄弟,我太懂你被这些Netty的Debug日志刷屏的烦躁了!本来想专注看测试结果,结果一堆乱七八糟的配置信息占满控制台,试了常规方法还不管用对吧?别慌,这是因为这些日志来自Selenium依赖的Netty和AsyncHttpClient组件,得精准针对这俩包下手,给你几个亲测有效的解决方案:
方案1:用日志配置文件彻底管控输出
如果你的项目用Logback(Selenium常用的日志框架),直接在src/test/resources下新建logback.xml文件,把下面的内容粘进去:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 把Netty和AsyncHttpClient的日志级别设为INFO,彻底屏蔽DEBUG --> <logger name="io.netty" level="INFO"/> <logger name="org.asynchttpclient" level="INFO"/> <!-- 根日志级别设为INFO,确保只输出重要信息 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration>
要是用的是Log4j2,就新建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> <Logger name="io.netty" level="INFO"/> <Logger name="org.asynchttpclient" level="INFO"/> <Root level="INFO"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
方案2:直接在IntelliJ里加VM参数(懒人必备)
不想搞配置文件?直接在Run配置里加VM参数就行:
- 点击IntelliJ顶部的
Run→Edit Configurations - 找到你的Selenium测试配置,在
VM options里粘贴:
-Dio.netty.level=INFO -Dorg.asynchttpclient.level=INFO
要是想更彻底,直接把这俩的日志级别设为ERROR,连INFO级别的都屏蔽:
-Dio.netty.level=ERROR -Dorg.asynchttpclient.level=ERROR
方案3:结合测试框架进一步精简输出
如果用TestNG,在testng.xml里把verbose设为1,只输出测试结果:
<suite name="SeleniumTests" verbose="1"> <test name="MyTests"> <classes> <class name="com.yourpackage.YourTestClass"/> </classes> </test> </suite>
要是用JUnit,可以在测试类的初始化方法里手动设置日志级别:
import org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; @BeforeClass public static void setupLogging() { // 关闭Netty的DEBUG日志 Logger nettyLogger = (Logger) LoggerFactory.getLogger("io.netty"); nettyLogger.setLevel(Level.INFO); // 关闭AsyncHttpClient的DEBUG日志 Logger ahcLogger = (Logger) LoggerFactory.getLogger("org.asynchttpclient"); ahcLogger.setLevel(Level.INFO); }
为啥之前的方法没用?其实Grep Console只是过滤显示,日志本身还是会输出;而普通的日志级别设置没精准定位到io.netty和org.asynchttpclient这两个包,所以必须明确指定它们的级别才行。
内容的提问来源于stack exchange,提问作者CSKR
相关产品推荐
相关产品推荐

