日志写入数据库:Logback-DBAppender

Logback-DBAppender

DBAppender以独立于Java编程语言的格式将日志事件插入到三个数据库表中。
这三个表是 logging_eventlogging_event_propertylogging_event_exception
在使用DBAppender之前,它们必须存在。Logback附带了创建表的SQL脚本。
它们可以在 logback-classic/src/main/java/ch/qos/logback/classic/db/script 文件夹下找到。
对于每个最流行的数据库系统,都有一个特定的脚本。如果您的特定类型的数据库系统缺少脚本,那么应该很容易以现有脚本为例编写一个脚本。
如果JDBC驱动程序支持JDBC 3.0规范中引入的getGeneratedKeys方法,假设您已经创建了如上所述的适当的数据库表,那么就不需要额外的步骤。
否则,必须有适合您的数据库系统的sql方言。目前,logback有H2、HSQL、MS SQL Server、MySQL、Oracle、PostgreSQL、SQLLite和Sybase等多种方言。

如前所述,logback使用三个表来存储日志事件数据:

BEGIN;
DROP TABLE IF EXISTS logging_event_property;
DROP TABLE IF EXISTS logging_event_exception;
DROP TABLE IF EXISTS logging_event;
COMMIT;


BEGIN;
CREATE TABLE logging_event
(
    timestmp         BIGINT NOT NULL,
    formatted_message  TEXT NOT NULL,
    logger_name       VARCHAR(254) NOT NULL,
    level_string      VARCHAR(254) NOT NULL,
    thread_name       VARCHAR(254),
    reference_flag    SMALLINT,
    arg0              VARCHAR(254),
    arg1              VARCHAR(254),
    arg2              VARCHAR(254),
    arg3              VARCHAR(254),
    caller_filename   VARCHAR(254) NOT NULL,
    caller_class      VARCHAR(254) NOT NULL,
    caller_method     VARCHAR(254) NOT NULL,
    caller_line       CHAR(4) NOT NULL,
    event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;

BEGIN;
CREATE TABLE logging_event_property
(
    event_id	      BIGINT NOT NULL,
    mapped_key        VARCHAR(254) NOT NULL,
    mapped_value      TEXT,
    PRIMARY KEY(event_id, mapped_key),
    FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;

BEGIN;
CREATE TABLE logging_event_exception
(
    event_id         BIGINT NOT NULL,
    i                SMALLINT NOT NULL,
    trace_line       VARCHAR(254) NOT NULL,
    PRIMARY KEY(event_id, i),
    FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
);
COMMIT;

maven 依赖

通过使用 platform-bom 来管理依赖的版本问题。使用 druid 作为 JDBCAppender 的连接池。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>Cairo-RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <optional>true</optional>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <optional>true</optional>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>
</dependencies>

日志配置文件:logback.xml

ch.qos.logback.classic.db.DBAppender 是 logback 中 DBAppender 的实现类。

ch.qos.logback.core.db.DataSourceConnectionSource 是 DBAppender 的管理数据源的类。

com.alibaba.druid.pool.DruidDataSource 是数据源连接池,你也可以选择其它数据源连接池。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <dataSource class="com.alibaba.druid.pool.DruidDataSource">
                <!-- DruidDataSource 中的属性配置 -->
                <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                <url>jdbc:mysql://192.168.120.63:3306/learn?useSSL=false</url>
                <username>root</username>
                <password>123456</password>
            </dataSource>
        </connectionSource>
    </appender>

    <logger name="com.littlefxc.examples.logback" level="debug"/>

    <root level="debug">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="DB" />
    </root>
</configuration>

启动

package com.littlefxc.examples.logback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author fengxuechao
 * @date 2019/2/12
 **/
public class App {

    private static final Logger log = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {
        long l = System.currentTimeMillis();
        log.debug("This is debug");
        long r = System.currentTimeMillis();
        System.out.println(r - l);
        log.info("This is info");
        log.warn("This is warn");
        log.error("This is error");
        log.error("This is exception", new RuntimeException("this is a exception"));
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`classpath:logback-spring.xml` 是一个文件路径的表达式,它表示在类路径下查找名为 `logback-spring.xml` 的文件。 在使用 Spring Boot 时,`logback-spring.xml` 文件通常用于配置日志记录器和日志输出的方式。Spring Boot 默认支持 Logback 作为日志框架,因此你可以在类路径下创建一个名为 `logback-spring.xml` 的文件来配置日志。 你可以按照以下步骤来使用 `logback-spring.xml` 文件进行日志配置: 1. 在你的项目资源文件夹(一般是 `src/main/resources`)下创建一个名为 `logback-spring.xml` 的文件。 2. 在 `logback-spring.xml` 文件中,你可以使用 Logback 的 XML 配置语法来定义日志记录器、日志输出方式、日志格式等。你可以根据自己的需求进行配置。 以下是一个简单的 `logback-spring.xml` 文件示例,用于将日志输出到控制台: ```xml <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 这个示例配置了一个名为 `CONSOLE` 的控制台输出日志的 appender,并定义了日志输出的格式。 3. 将 `logback-spring.xml` 文件放置在类路径下,例如将它放置在 `src/main/resources` 目录下。 当你的应用程序启动时,它将自动加载并应用 `logback-spring.xml` 文件中的配置。 希望这能帮助到你进行日志配置。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值