我正在尝试将Selenium日志测试输出到mysql数据库。我有logback.xml,它位于包的src中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<dataSource class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
<serverName>http://php4dvd.com.ua/openserver/</serverName>
<port>3306</port>
<databaseName>ConsoleOutput</databaseName>
<user>root</user>
<password></password>
</dataSource>
</connectionSource>
</appender>
<root level="DEBUG" >
<appender-ref ref="DB" />
</root>
</configuration>
我的JUnit测试是:
package us.st.selenium.protocols;
import static org.junit.Assert.*;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import ch.qos.logback.core.db.ConnectionSource;
import ch.qos.logback.classic.db.DBAppender;
public class ConsoleOutputToMySql {
private RemoteWebDriver driver;
private static Logger LOG = LoggerFactory.getLogger(ConsoleOutputToMySql.class);
@Before
public void initDriver(){
LOG.debug("Starting Firefox");
driver = new FirefoxDriver();
LOG.debug("Firefox started");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void sampletest() throws Exception {
LOG.info("Started sampletest");
LOG.info("Go to main page");
driver.get("http://php4dvd.com.ua");
LOG.info("login as admin / admin");
driver.findElement(By.id("username")).sendKeys("admin");
driver.findElement(By.name("password")).sendKeys("admin");
driver.findElement(By.name("submit")).sendKeys(Keys.RETURN);
Thread.sleep(4000);
LOG.info("logout");
driver.findElement(By.xpath("//header//li[4]/a")).click();
driver.switchTo().alert().accept();
LOG.info("Finished sampleTest");
}
@After
public void stopDriver(){
LOG.debug("Firefox finished");
driver.quit();
}
}
我已经用mysql字段创建了db。我可以通过本地计算机上的此链接访问数据库表:
http://php4dvd.com.ua/openserver/phpmyadmin/index.php?db=ConsoleOutput
这里是测试库:
https://github.com/Arkhypov/Selenium_tests/tree/master/SeleniumIntermediate/src
当我运行测试时,我仍然看到控制台日志输出,而不是将日志附加到数据库。我想我忘了什么。。。请问谁能帮忙?
最佳答案
ch.qos.logback.core.db.DriverManagerConnectionSource
没有dataSource属性,而ch.qos.logback.core.db.DataSourceConnectionSource
有。你可能想用它来配置数据库
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
<serverName>http://php4dvd.com.ua/openserver/</serverName>
<port>3306</port>
<databaseName>ConsoleOutput</databaseName>
<user>root</user>
<password></password>
</dataSource>
</connectionSource>
</appender>
<root level="DEBUG" >
<appender-ref ref="DB" />
</root>
</configuration>
或者可以使用JDBC驱动程序而不是MysqlDataSource。
<configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://host_name:3306/datebase_name</url>
<user>username</user>
<password>password</password>
</connectionSource>
</appender>
<root level="DEBUG" >
<appender-ref ref="DB" />
</root>
</configuration>
此外,Logback不能创建表本身。您需要同时创建数据库及其表。您可以从here获取创建脚本。
更新
如果logback.xml不在类路径中,则可以使用属性
logback.configurationFile
指定启动应用程序时使用的日志文件。下面是一个例子 java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
在eclipse中,可以在运行配置中定义此类参数。您可以找到详细信息here
更新2
根据github项目,您在类路径上添加了2个slf4j api实现。您可以删除slf4j-simple-1.7.12.jar。仍然像这样使用记录器。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
}
更新3
我还在github中创建了一个maven项目,演示如何使用logback和slf4j将日志附加到数据库(postgresql)。
关于java - 登录输出到mySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32324043/