我正在尝试将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/

10-12 13:05