博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日志写入数据库:Log4j2-JDBCAppender
阅读量:2168 次
发布时间:2019-05-01

本文共 4381 字,大约阅读时间需要 14 分钟。

Log4j2-JDBCAppender

JDBCAppender使用标准JDBC将日志事件写入关系数据库表。可以将其配置为使用JNDI数据源或自定义工厂方法获取JDBC连接。

无论采用哪种方法,都必须有连接池作为支持。否则,日志记录性能将受到很大影响。

maven 依赖

通过使用 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

日志配置文件:log4j2.xml

<JDBC></JDBC> 是 Log4j2 的 JDBCAppender 的标签。

ConnectionFactory 是一个实现 Druid 连接池的单例类, 通过 method 属性来获取 java.sql.Connection

Column 表示数据表 log4j2 的字段。

数据库文件:schema.sql

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;

ConnectionFactory

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 连接池的单例类。

db.properties

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/

你可能感兴趣的文章
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>
(PAT 1154) Vertex Coloring (图的广度优先遍历)
查看>>
(PAT 1115) Counting Nodes in a BST (二叉查找树-统计指定层元素个数)
查看>>
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>