Logback 输出到 mySQL
Logback output to mySQL
我正在尝试将 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 个字段的数据库。我可以在我的本地机器上通过这个 link 访问数据库 table:
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
没有数据源 属性 而 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 不在 class 路径中,您可以使用 属性 logback.configurationFile
指定您在启动应用程序时使用的日志文件。这是一个例子
java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
在eclipse中你可以在运行配置中定义这种参数。您可以找到详细信息 here
更新 2
根据您的 github 项目,您在 class 路径上添加了 2 个 slf4j-api 实现。您可以删除 slf4j-simple-1.7.12.jar。并且仍然像这样使用 Logger。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
}
更新 3
我也在github, that demonstrate how to append log to database (postgresql) using logback and slf4j. You can get it from github中创建了一个maven项目。
我正在尝试将 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 个字段的数据库。我可以在我的本地机器上通过这个 link 访问数据库 table:
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
没有数据源 属性 而 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 不在 class 路径中,您可以使用 属性 logback.configurationFile
指定您在启动应用程序时使用的日志文件。这是一个例子
java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
在eclipse中你可以在运行配置中定义这种参数。您可以找到详细信息 here
更新 2
根据您的 github 项目,您在 class 路径上添加了 2 个 slf4j-api 实现。您可以删除 slf4j-simple-1.7.12.jar。并且仍然像这样使用 Logger。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyService {
private static final Logger logger = LoggerFactory.getLogger(MyService.class);
}
更新 3
我也在github, that demonstrate how to append log to database (postgresql) using logback and slf4j. You can get it from github中创建了一个maven项目。