本文共 4381 字,大约阅读时间需要 14 分钟。
JDBCAppender使用标准JDBC将日志事件写入关系数据库表。可以将其配置为使用JNDI数据源或自定义工厂方法获取JDBC连接。
无论采用哪种方法,都必须有连接池作为支持。否则,日志记录性能将受到很大影响。通过使用 platform-bom
来管理依赖的版本问题。使用 druid 作为 JDBCAppender 的连接池。
io.spring.platform platform-bom Cairo-RELEASE import pom org.apache.logging.log4j log4j-slf4j-impl runtime true org.apache.logging.log4j log4j-core runtime true org.slf4j slf4j-api true com.alibaba druid 1.1.10 mysql mysql-connector-java
<JDBC></JDBC>
是 Log4j2 的 JDBCAppender 的标签。
ConnectionFactory
是一个实现 Druid 连接池的单例类, 通过 method
属性来获取 java.sql.Connection
。
Column
表示数据表 log4j2
的字段。
SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS log4j2;CREATE TABLE `log4j2` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `time` char(23) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `level` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `logger` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `message` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `exception` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '', PRIMARY KEY (`id`) USING BTREE) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;SET FOREIGN_KEY_CHECKS = 1;
package com.littlefxc.examples.log4j2;import com.alibaba.druid.pool.DruidDataSource;import javax.sql.DataSource;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;/** * Log4j2 ConnectionFactory * * @author fengxuechao */public class ConnectionFactory { private final DataSource dataSource; private ConnectionFactory() { Properties properties = new Properties(); String lineSeparator = File.separator; String fileName = String.join(lineSeparator, System.getProperty("user.dir"), "Log4j2-JDBCAppender", "src", "main", "resources", "db.properties"); try (InputStream stream = new FileInputStream(fileName)) { properties.load(stream); } catch (IOException e) { e.printStackTrace(); } this.dataSource = new DruidDataSource(); ((DruidDataSource) this.dataSource).configFromPropety(properties); } public static Connection getDatabaseConnection() throws SQLException { return Singleton.INSTANCE.dataSource.getConnection(); } private static interface Singleton { final ConnectionFactory INSTANCE = new ConnectionFactory(); }}
ConnectionFactory
是一个实现 Druid 连接池的单例类。
druid.url=jdbc:mysql://192.168.120.63:3306/learn?useSSL=falsedruid.username=rootdruid.password=123456druid.driverClassName=com.mysql.jdbc.Driverdruid.maxActive=10druid.minIdle=5
package com.littlefxc.examples.log4j2;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author fengxuechao * @date 2019/2/11 **/public class App { private static final Logger log = LoggerFactory.getLogger(App.class); public static void main(String[] args) { log.debug("This is debug"); log.info("This is info"); log.warn("This is warn"); log.error("This is error"); log.error("This is error", new RuntimeException("this is a exception")); }}
转载地址:http://ztxzb.baihongyu.com/