当前位置:   article > 正文

012_logback中的DBAppender_logback dbappender

logback dbappender

1. DBAppender把记录事件写入数据库的三张表。三张表分别是logging_event、logging_event_property和logging_event_exception。在使用DBAppender之前, 这三张表必须已经被创建。Logback提供创建这些表的SQL脚本, 位于logback-classic/src/main/java/ch/qos/logback/classic/db/script目录, 对各个流行数据库分别有一个脚本。如果没有你想用的数据库的脚本, 那就按照现有的脚本自己写吧。

2. 创建表

2.1. logback提供的mysql.sql

2.2. logback提供的创建mysql数据库表代码

  1. BEGIN;
  2. DROP TABLE IF EXISTS logging_event_property;
  3. DROP TABLE IF EXISTS logging_event_exception;
  4. DROP TABLE IF EXISTS logging_event;
  5. COMMIT;
  6. BEGIN;
  7. CREATE TABLE logging_event
  8. (
  9. timestmp BIGINT NOT NULL,
  10. formatted_message TEXT NOT NULL,
  11. logger_name VARCHAR(254) NOT NULL,
  12. level_string VARCHAR(254) NOT NULL,
  13. thread_name VARCHAR(254),
  14. reference_flag SMALLINT,
  15. arg0 VARCHAR(254),
  16. arg1 VARCHAR(254),
  17. arg2 VARCHAR(254),
  18. arg3 VARCHAR(254),
  19. caller_filename VARCHAR(254) NOT NULL,
  20. caller_class VARCHAR(254) NOT NULL,
  21. caller_method VARCHAR(254) NOT NULL,
  22. caller_line CHAR(4) NOT NULL,
  23. event_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
  24. );
  25. COMMIT;
  26. BEGIN;
  27. CREATE TABLE logging_event_property
  28. (
  29. event_id BIGINT NOT NULL,
  30. mapped_key VARCHAR(254) NOT NULL,
  31. mapped_value TEXT,
  32. PRIMARY KEY(event_id, mapped_key),
  33. FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
  34. );
  35. COMMIT;
  36. BEGIN;
  37. CREATE TABLE logging_event_exception
  38. (
  39. event_id BIGINT NOT NULL,
  40. i SMALLINT NOT NULL,
  41. trace_line VARCHAR(254) NOT NULL,
  42. PRIMARY KEY(event_id, i),
  43. FOREIGN KEY (event_id) REFERENCES logging_event(event_id)
  44. );
  45. COMMIT;

2.3. 拷贝sql代码到Navicat编辑器里执行

2.4. 表创建完成

2.5. 表logging_event字段和含义

2.6. 表logging_event_property字段和含义, 用于存储包含在MDC或上下文里的键和值

2.7. 表logging_event_exception字段和含义

3. ConnectionSource接口和派生类

3.1. logback的ConnectionSource接口提供了一种可插拔地、透明地获取JDBC连接的方法。现在有三种具体实现: DataSourceConnectionSource、DriverManagerConnectionSource和JNDIConnectionSource。

3.2. ConnectionSource接口

3.3. DriverManagerConnectionSource是ConnectionSource的一个实现, 以传统的JDBC方式从连接URL里取得连接。

3.4. 注意DriverManagerConnectionSource会在每次调用getConnection()方法时建立一个新连接。

3.5. DriverManagerConnectionSource配置

  1. <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
  2. <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
  3. <driverClass>com.mysql.cj.jdbc.Driver</driverClass>
  4. <url>jdbc:mysql://192.168.25.138:3306/studyjdbc?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</url>
  5. <user>root</user>
  6. <password>lyw123456</password>
  7. </connectionSource>
  8. </appender>

4. 连接池

4.1. 记录事件有时创建得很快。为了来得及插入数据库, 推荐为DBAppender使用连接池。

4.2. 使用DataSourceConnectionSource可以配置连接池, 推荐使用c3p0。

4.3. 新建一个名为DBAppender的Java项目, 同时添加相关jar包

4.4. 在src目录下编辑loback.xml

  1. <configuration debug="true">
  2. <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
  3. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  4. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  5. </encoder>
  6. </appender>
  7. <appender name="db" class="ch.qos.logback.classic.db.DBAppender">
  8. <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
  9. <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
  10. <driverClass>com.mysql.cj.jdbc.Driver</driverClass>
  11. <jdbcUrl>jdbc:mysql://192.168.25.138:3306/studyjdbc?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</jdbcUrl>
  12. <user>root</user>
  13. <password>lyw123456</password>
  14. </dataSource>
  15. </connectionSource>
  16. </appender>
  17. <root level="debug">
  18. <appender-ref ref="db" />
  19. <appender-ref ref="stdout" />
  20. </root>
  21. </configuration>

4.5. 编辑MyDb.java

  1. package com.zr.mail;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class MyDb {
  5. private static final Logger logger = LoggerFactory.getLogger(MyDb.class);
  6. public static void main(String[] args) {
  7. logger.trace("向数据库写入一个跟踪信息");
  8. logger.debug("向数据库写入一个测试信息");
  9. logger.info("向数据库写入一个日志信息");
  10. logger.warn("向数据库写入一个警告信息");
  11. logger.error("向数据库写入一个错误信息");
  12. }
  13. }

4.6. 运行项目

4.7. 插入数据库数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/312767
推荐阅读
相关标签
  

闽ICP备14008679号