Reputation: 8162
I have a Java project that uses selenium and ChromeDriver to automate testing on my website. I have log4j2 and slf4j configured for my logging files. The driver however refuses to log into my files and uses the console instead:
Starting ChromeDriver 2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41) on port 41019
Only local connections are allowed.
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Apr 20, 2018 12:31:42 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
What do I have to tweak in my logging settings so that the web driver logs into my logging files and not to console? My knowledge about logging is limited, sorry. An explanation what I did wrong would be appreciated.
I tried the following appenders in my log4j2.xml:
<logger name="org.openqa.selenium" level="all">
<AppenderRef ref="selenium"/>
</logger>
<logger name="webdriver.chrome" level="all">
<AppenderRef ref="webdriverChrome"/>
</logger>
<logger name="org.apache.http.client.protocol.RequestAddCookies" level="all">
<AppenderRef ref="webdriverChrome"/>
</logger>
<logger name="org.seleniumhq.selenium.selenium-chrome-driver" level="all">
<AppenderRef ref="webdriverChrome"/>
</logger>
My maven pom.xml:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.22</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>htmlunit-driver</artifactId>
<version>2.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.4.0</version>
</dependency>
Upvotes: 2
Views: 543
Reputation: 8162
I found this half baked solution. Use this code when you initialize the web/chrome driver:
Properties log4jProp = new Properties();
log4jProp.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(log4jProp);
System.setProperty("webdriver.chrome.logFile", ".//log//webdriverChrome_1.log");
System.setProperty("webdriver.chrome.driver", ".\\path\\to\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(waitInMilliseconds, TimeUnit.MILLISECONDS);
It only removes the warning for the logging framework. I am satisfied to a degree. If anyone knows the answer to get the rest of the console message into a logger would be appreciated.
The result so far:
Starting ChromeDriver 2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41) on port 41019
Only local connections are allowed.
Apr 20, 2018 12:31:42 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Upvotes: 1