gpt4 book ai didi

java - Logback 输出到 mySQL

转载 作者:行者123 更新时间:2023-11-29 02:54:22 27 4
gpt4 key购买 nike

我正在尝试将 Selenium 日志测试输出到 mysql 数据库。我有位于包 src 中的 logback.xml:

<?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 字段创建了数据库。我可以通过本地计算机上的此链接访问数据库表:

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 不在类路径中,您可以在启动应用程序时使用属性 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。并且仍然像这样使用 Logger。

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)。你可以从github得到它.

关于java - Logback 输出到 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32324043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com