zhuangjinxin / blog

:notebook: 个人博客 技术分享 整理笔记
http://blog.zhuangjinxin.top
7 stars 0 forks source link

使用Logback把日志记录到数据库中 #7

Open zhuangjinxin opened 7 years ago

zhuangjinxin commented 7 years ago

先看一下日志被记录到数据库中的效果图: 日志效果图

引入logback依赖包:

dependencies{
      compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.1'
      compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.1'
      compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
}
注:
1.如果其他依赖包中包含这两个logback依赖包,可省略上面两个;
2.MySQL的JDBC的驱动包为连接数据库所用。以下以MySQL为例,其他数据库类似。

配置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">
            <driverClass>com.mysql.jdbc.Driver</driverClass>
            <url>jdbc:mysql://*.*.*.*:3306/databases</url>
            <user>user</user>
            <password>passworld</password>
        </connectionSource>
    </appender>
    <root level="INFO">
        <appender-ref ref="db" />
    </root>
</configuration>
注:
1. *.*.*.*:3306/databases为数据库地址;
2.user、password为此数据库的登录名和密码。

在数据库中添加logback日志数据表

# Logback: the reliable, generic, fast and flexible logging framework.  
# Copyright (C) 1999-2010, QOS.ch. All rights reserved.  
#  
# See http://logback.qos.ch/license.html for the applicable licensing   
# conditions.  
# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.  
#  
# It is intended for MySQL databases. It has been tested on MySQL 5.1.37   

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; 

注:不同数据库的建表sql脚本在logback-classic/src/main/java/ch/qos/logback/classic/db/script文件夹下找到(就是上面引入的logback-classic包里面)。其中包括:db2.sql、h2.sql、hsqldb.sql、mssql.sql、oracle.sql、postgresql.sql、sqlite.sql、sybaseSqlAnyWhere.sql等sql脚本文件。

加载logback.xml文件

不同的框架集成logback的方式不一样,此处以Spring Boot为例: 在application.properties文件中加入下面这句话,并把logback.xml文件放在src/main/resources文件夹下,启动Spring Boot程序即可!

logging.config=classpath:logback.xml
yuyun1117 commented 6 years ago

logback可以自定义日志的内容吗?比如操作日志。