将日志输出到数据库其实很简单,首先定义一个appender:
appender("DB", DBAppender) {
connectionSource(DriverManagerConnectionSource) {
driverClass = "com.mysql.cj.jdbc.Driver"
user = "sample"
password = "sample@chuyun"
url = "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai"
}
}
注意,早些年的解决方案目前好像都不好使了。
另外,设置日志输出的级别:
root(INFO, ['FILE', 'DB'])
数据库的结构如下代码所示:
/*
Navicat Premium Data Transfer
Source Server : sample
Source Server Type : MySQL
Source Server Version : 80016
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80016
File Encoding : 65001
Date: 09/10/2020 16:39:19
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for logging_event
-- ----------------------------
DROP TABLE IF EXISTS `logging_event`;
CREATE TABLE `logging_event` (
`timestmp` bigint(20) NOT NULL,
`formatted_message` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`logger_name` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`level_string` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`thread_name` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`reference_flag` smallint(6) NULL DEFAULT NULL,
`arg0` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`arg1` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`arg2` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`arg3` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`caller_filename` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`caller_class` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`caller_method` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`caller_line` char(4) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`event_id` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`event_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for logging_event_exception
-- ----------------------------
DROP TABLE IF EXISTS `logging_event_exception`;
CREATE TABLE `logging_event_exception` (
`event_id` bigint(20) NOT NULL,
`i` smallint(6) NOT NULL,
`trace_line` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`event_id`, `i`) USING BTREE,
CONSTRAINT `logging_event_exception_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `logging_event` (`event_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for logging_event_property
-- ----------------------------
DROP TABLE IF EXISTS `logging_event_property`;
CREATE TABLE `logging_event_property` (
`event_id` bigint(20) NOT NULL,
`mapped_key` varchar(254) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`mapped_value` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
PRIMARY KEY (`event_id`, `mapped_key`) USING BTREE,
CONSTRAINT `logging_event_property_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `logging_event` (`event_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;