在开发工程中,我们通过slf4j进行日志的打印以及生成日志文件,每次对日志进行查询要么就是通过翻找控制台的打印结果或者文件,这样实在不方便。

通过将日志记录到数据库中,这样还能够在系统界面查看日志。

目录

  • 一、创建数据表
  • 二、配置
    • 1. 引入依赖
    • 2. 编写logback配置文件
    • 3.添加配置信息
    • 4. 测试
  • 三、定期删除日志
    • 1. 开启事件调度器
    • 2. 创建事件(创建后默认开启)
    • 3. 关闭事件
    • 4. 开启事件
    • 5. 查看事件

以日志写入mysql为例

一、创建数据表

创建三张数据表logging_event、logging_event_property、logging_event_exception用来保存日志数据;

建表sql如下:

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)ON UPDATE CASCADE ON DELETE CASCADE);
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) ON UPDATE CASCADE ON DELETE CASCADE);
COMMIT;

两个外键设置级联,保证数据的完整性

二、配置

1. 引入依赖

<!-- 日志写入数据库引用 begin -->
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.7</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.7</version>
</dependency>
<!-- 日志写入数据库引用 end -->

2. 编写logback配置文件

在resource目录创建logback-custom.xml作为日志的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><springProperty scope="context" name="APP_NAME" source="spring.application.name"/><springProperty scope="context" name="LOG_FILE" source="logging.path"/><springProperty scope="context" name="ServerPort" source="server.port"/><!-- 自定义控制台输出的pattern --><property name="CONSOLE_LOG_PATTERN" value="%date [%thread] %-5level %logger{80} - %msg%n"/><!-- 引用默认的appender, 假如不满足需求, 可以自定义appender(logstash可引用logstash-appender.xml, 进行自定义LOGSTASH_LOG_PATTERN) --><include resource="com/southgis/ibase/logstatistics/logging/logback/console-appender.xml"/><include resource="com/southgis/ibase/logstatistics/logging/logback/logstash-default-appender.xml"/><include resource="com/southgis/ibase/logstatistics/logging/logback/exprout-appender.xml"/><!-- 配置属性 --><springProperty scope="context" name="JDBC_URL" source="logging.datasource.url"/><springProperty scope="context" name="USER_NAME" source="logging.datasource.username"/><springProperty scope="context" name="PASSWORD" source="logging.datasource.password"/><springProperty scope="context" name="DATA_SOURCE" source="logging.datasource.type"/><!-- 写入到数据库 --><appender name="DB" class="ch.qos.logback.classic.db.DBAppender"><connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"><dataSource class="${DATA_SOURCE}}"><jdbcUrl>${JDBC_URL}</jdbcUrl><username>${USER_NAME}</username> <!-- 数据库用户名 --><password>${PASSWORD}</password> <!-- 密码 --></dataSource></connectionSource></appender><!-- 表达式$.print("xx")的输出 --><logger name="script.debug" level="INFO" additivity="false"><appender-ref ref="EXPROUT"/></logger><root level="INFO"><!-- <appender-ref ref="IBASEDEBUG"/> --><appender-ref ref="LOGSTASH"/><appender-ref ref="CONSOLE"/><appender-ref ref="DB"/></root>
</configuration>

通过springProperty标签动态读取appication.yml的内容作为参数。

3.添加配置信息

在application.yml 添加logback要用的配置信息,让logback配置文件动态读取这些配置文件

# 日志配置
logging:config: classpath:logback-custom.xml #logback配置文件路径path: /ibase/logsdbstore:enabled: true #特定日志信息是否存贮到数据库datasource:username: "用户名"password: "密码"url: "数据库url"type: "数据源"

4. 测试

配置完毕,启动服务,可以看到控制台打印日志的同时,执行插入sql将日志插入到数据库中

三、定期删除日志

通过mysql自己的事件调度器实现定期删除日志数据;

1. 开启事件调度器

确认是否开启

SHOW VARIABLES LIKE 'event_scheduler';

开启命令(具备root权限)

SET GLOBAL event_scheduler = ON;

2. 创建事件(创建后默认开启)

CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule[ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment']DO sql_statement;

例如:每30天清空30天前的所有记录,仅保留近30天数据

CREATE EVENT LOGGING_EVENT_TRUNCATE ON SCHEDULE EVERY 30 DAY DO
DELETE FROM LOGGING_EVENT WHERE FROM_UNIXTIME(TIMESTMP/1000,'%Y-%m-%d')<DATE_SUB(CURDATE(),INTERVAL 30 DAY);

3. 关闭事件

alter event LOGGING_EVENT_TRUNCATE disable;

4. 开启事件

drop event if exists event_name;

5. 查看事件

show events;

slf4j保存日志到数据库相关推荐

  1. 使用 Room 将数据保存到本地数据库学习日志+demo

    Android中使用 Room 并结合LiveData+ViewModel+RecyclerView将数据保存到本地数据库 Room理论学习 前期准备 导入库 Room三大组件之一:Entity Ro ...

  2. logback日志pattern_003、Spring Boot使用slf4j进行日志记录

    在开发中,我们经常使用 System.out.println() 来打印一些信息,但是这样不好,因为大量的使用 System.out 会增加资源的消耗.我们实际项目中使用的是 slf4j 的 logb ...

  3. Springboot配置保存日志文件

    点击关注公众号,利用碎片时间学习 来源:blog.csdn.net/gaopinqiang/ article/details/109228641 springboot日志配置: springboot默 ...

  4. slf4j导入那个依赖_学习SPRINGBOOT结合日志门面SLF4J和日志实现LOGBACK的混合使用

    一.此处主要介绍在springboot工程下如何使用 logback + slf4j 进行日志记录. logback主要包含三个组成部分:Loggers(日志记录器).Appenders(输出目的在) ...

  5. android读取excel数据库,Android 读取Excel数据并保存在本地数据库

    在工作中遇到需要将Excel的数据读取出来并保存在本地数据库中的操作,数据如下: 图片.png 需要做以下准备: 读取Excel的jar包[文章末尾会分享该jar包] 保存数据的数据库框架,在这里我们 ...

  6. Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...

    关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089    在开发中,我们常常用打印log的方 ...

  7. 删除oracle数据库归档日志,Oracle数据库--删除归档日志

    windows操作系统: 最好在删除日志的时候,做好相应的日志或者数据库备份. C:\Documents and Settings\admin>rman 恢复管理器: Release 10.2. ...

  8. 4、MySQL使用二进制日志还原数据库

    二进制日志中记录了用户对数据库更改的所有操作,如 INSERT 语句.UPDATE 语句.CREATE 语句等.如果数据库因为操作不当或其它原因丢失了数据,可以通过二进制日志来查看在一定时间段内用户的 ...

  9. 让XShell保存日志教程

    2019独角兽企业重金招聘Python工程师标准>>> 在我们使用xshell可以轻松安全的操作远程服务器时,会执行很多的命令.而我们操作完之后不会记得执行过什么命令,这些命令又会产 ...

最新文章

  1. 最新大脑图谱研究表明,手部的运动区域也与整个身体相连
  2. 线上 4 台机器同一时间全部 OOM,到底发生了什么?
  3. MySQL探索(一):B-Tree索引
  4. rust(12)-闭包,闭包作为返回值,闭包作为参数
  5. 超大数据量存储常用数据库分表分库算法总结
  6. [转]如何设置win7一直以管理员身份运行
  7. java遍历子目录_Java遍历文件夹及子目录代码实例
  8. Spring Boot笔记-拦截器相关(用户权限方面)
  9. 拖动卡顿_教你4招,让你的ps永不卡顿
  10. mysql 外键设置
  11. cli php 增强包_Linux 上安装 PHP 扩展
  12. 翻译: 2.2 Pandas Pytorch 数据预处理 深入神经网络
  13. 基于SSM实现的网上书城系统【附源码】(毕设)
  14. 百位活跃天使投资人名单
  15. 洛谷P5713 【深基3.例5】洛谷团队系统经典解法
  16. 多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步?
  17. JS一元运算符(前++,后++)详解
  18. 一个u盘大小的树莓派就能搭建一个服务器
  19. 043-云E办_后端项目总结
  20. 裁员还不够,GitHub 要求全员转 Teams 惹开发者吐槽!

热门文章

  1. 手机端有没有好用的图片识别文字工具值得推荐?
  2. 全球及中国便捷式GNSS接收器行业供应需求及项目投资战略分析报告2022-2027年
  3. Radon定理与证明
  4. 计算机文化期末试卷,计算机文化基础期末试卷.pdf
  5. JS函数的参数(arguments)的使用
  6. oracle times ten 学习笔记
  7. 安卓8.0桌面图标适配
  8. linux下生成ssh密钥并获取密钥
  9. (C语言)简单的绝对值排序
  10. 解决tomcat7安装后启动时一闪而退的bug