二进制日志的文件的作用 mysql二进制日志文件用来记录所有用户对数据库操作,即记录用户对数据库操作的sql语句。如果有此文件,当数据库发生意外时,可以通过此文件查看到用户在此文件记录的时间段内用户所做的操作,再和数据库备份配合使用,即可再现用
【摘要】
本文主要介绍Log4j2记录日志到MySQL和MongoDB数据库,用简单的例子来讲解,并解决了一些官方配置可能出现的错误。具体内容可参见官方文档:http://logging.apache.org/log4j/2.x/manual/appenders.html左侧导航栏的Appenders->JDBC和Appenders->NoSQL两项
【引用】
1. Log4j2记录日志到MySQL
1.1. 首先创建存储日志的数据表ibs_log
创建语句如下:
DROP TABLE IF EXISTS `ibs_log`;
CREATE TABLE `ibs_log` (
`log_id` int(10) NOT NULL AUTO_INCREMENT,
`log_date` datetime NOT NULL COMMENT '日期',
`log_file` varchar(255) DEFAULT NULL COMMENT '文件名',
`log_line` varchar(255) DEFAULT NULL COMMENT '行号',
`log_thread`varchar(255) DEFAULT NULL COMMENT '线程',
`log_level` varchar(255) DEFAULT NULL COMMENT 'Log级别 info warndebug error等',
`log_message` varchar(2048) DEFAULT NULL COMMENT 'Log信息',
PRIMARY KEY (`log_id`,`log_date`),
KEY`INDEX_LOG_DATE` (`log_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2. 创建Log4j2.xml配置文件
需要创建数据表、数据行的对应关系
1.3. 创建数据库连接类ConnectionFactory
需要修改下面代码中用户名、密码、数据库名称为你使用的数据库对用的用户名密码以及名称:
【ConnectionFactory.java】
00 – Undo Log Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。 - 事务的原子性(Atomicity) 事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中
package com.centerm.util;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
importorg.apache.commons.dbcp.DriverManagerConnectionFactory;
importorg.apache.commons.dbcp.PoolableConnection;
import org.apache.commons.dbcp.PoolableConnectionFactory;
importorg.apache.commons.dbcp.PoolingDataSource;
importorg.apache.commons.pool.impl.GenericObjectPool;
public class ConnectionFactory {
privatestatic interface Singleton {
final ConnectionFactory INSTANCE = new ConnectionFactory();
}
private final DataSource dataSource;
private ConnectionFactory() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(0);
}
Properties properties = new Properties();
properties.setProperty("user", "用户名");
properties.setProperty("password", "密码"); //or get properties from some configuration file
GenericObjectPoolpool = new GenericObjectPool();
DriverManagerConnectionFactory connectionFactory = newDriverManagerConnectionFactory(
"jdbc:mysql://localhost:3306/数据库名称",properties
);
new PoolableConnectionFactory(
connectionFactory, pool, null,"SELECT 1", 3, false, false, Connection.TRANSACTION_READ_COMMITTED
);
this.dataSource = new PoolingDataSource(pool);
}
public static Connection getDatabaseConnection() throws SQLException {
return Singleton.INSTANCE.dataSource.getConnection();
}
}
至此就可以运行项目测试了
1.4. 特别注意
由于项目启动时Log4j2是最先加载的内容,所以有可能出现ConnectionFactory这个类启动报错,所以需要在官网提供实例的基础上添加代码(上面类中已经添加):
2. Log4j2记录日志到MongoDB
2.1. 创建数据库
运行MongoDB客户端mongo-cli.exe,使用命令”usetest”创建数据库test,创建该数据库的用户[root:password],不需要手动创建collection。
2.2. 创建Log4j2.xml配置文件
!!!至此就可以运行项目测试了