log4j2 mysql_Log4j2记录日志到数据库(MySQL&MongoDB)

本文详细介绍了如何配置Log4j2将日志记录到MySQL和MongoDB数据库,包括创建数据表、配置Log4j2.xml文件、数据库连接类的编写等内容。同时,针对可能出现的错误提供了解决方案。
摘要由CSDN通过智能技术生成

【摘要】

本文主要介绍Log4j2记录日志到MySQL和MongoDB数据库,用简单的例子来讲解,并解决了一些官方配置可能出现的错误。具体内容可参见官方文档:http://logging.apache.org/log4j/2.x/manual/appenders.html左侧导航栏的Appenders->JDBC和Appenders->NoSQL两项

【引用】

Log4j2的基本配置我在前面的文章已经介绍,具体可参见:http://blog.csdn.net/ererfei/article/details/46831807

1.    Log4j2记录日志到MySQL

1.1.   首先创建存储日志的数据表ibs_log

创建语句如下:

[sql]  view plain

copy

DROPTABLEIF EXISTS `ibs_log`;

CREATETABLE`ibs_log` (

`log_id` int(10)NOTNULLAUTO_INCREMENT,

`log_date` datetime NOTNULLCOMMENT'日期',

`log_file` varchar(255)DEFAULTNULLCOMMENT'文件名',

`log_line` varchar(255)DEFAULTNULLCOMMENT'行号',

`log_thread`varchar(255)DEFAULTNULLCOMMENT'线程',

`log_level` varchar(255)DEFAULTNULLCOMMENT'Log级别 info warndebug error等',

`log_message` varchar(2048)DEFAULTNULLCOMMENT'Log信息',

PRIMARYKEY(`log_id`,`log_date`),

KEY`INDEX_LOG_DATE` (`log_date`) USING BTREE

) ENGINE=InnoDB DEFAULTCHARSET=utf8;

1.2.   创建Log4j2.xml配置文件

需要创建数据表、数据行的对应关系

[html]  view plain

copy

xmlversion="1.0"encoding="UTF-8"?>

JDBC>

Appenders>

Logger>

Root>

Loggers>

Configuration>

1.3.   创建数据库连接类ConnectionFactory

需要修改下面代码中用户名、密码、数据库名称为你使用的数据库对用的用户名密码以及名称:

【ConnectionFactory.Java】

[java]  view plain

copy

packagecom.centerm.util;

importjava.sql.Connection;

importjava.sql.SQLException;

importjava.util.Properties;

importjavax.sql.DataSource;

importorg.apache.commons.dbcp.DriverManagerConnectionFactory;

importorg.apache.commons.dbcp.PoolableConnection;

importorg.apache.commons.dbcp.PoolableConnectionFactory;

importorg.apache.commons.dbcp.PoolingDataSource;

importorg.apache.commons.pool.impl.GenericObjectPool;

publicclassConnectionFactory {

privatestatic interfaceSingleton {

finalConnectionFactory INSTANCE =newConnectionFactory();

}

privatefinalDataSource dataSource;

privateConnectionFactory() {

try{

Class.forName("com.mysql.jdbc.Driver");

} catch(ClassNotFoundException e) {

e.printStackTrace();

System.exit(0);

}

Properties properties = newProperties();

properties.setProperty("user","用户名");

properties.setProperty("password","密码");//or get properties from some configuration file

GenericObjectPoolpool = newGenericObjectPool();

DriverManagerConnectionFactory connectionFactory = newDriverManagerConnectionFactory(

"jdbc:mysql://localhost:3306/数据库名称",properties

);

newPoolableConnectionFactory(

connectionFactory, pool, null,"SELECT 1",3,false,false, Connection.TRANSACTION_READ_COMMITTED

);

this.dataSource =newPoolingDataSource(pool);

}

publicstaticConnection getDatabaseConnection()throwsSQLException {

returnSingleton.INSTANCE.dataSource.getConnection();

}

}

至此就可以运行项目测试了

1.4.   特别注意

由于项目启动时Log4j2是最先加载的内容,所以有可能出现ConnectionFactory这个类启动报错,所以需要在官网提供实例的基础上添加代码(上面类中已经添加):

f70c0968dec362af63e5f14e2adb9b99.png

2.    Log4j2记录日志到MongoDB

安装运行MongoDB:http://www.runoob.com/mongodb/mongodb-window-install.html

MongoDB驱动下载:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/

Java MongoDB API学习:http://blog.csdn.net/ererfei/article/details/50857103

2.1.   创建数据库

运行MongoDB客户端mongo-cli.exe,使用命令”usetest”创建数据库test,创建该数据库的用户[root:password],不需要手动创建collection。

2.2.   创建Log4j2.xml配置文件

[html]  view plain

copy

xmlversion="1.0"encoding="UTF-8"?>

NoSql>

Appenders>

Logger>

Root>

Loggers>

Configuration>

!!!至此就可以运行项目测试了

log4j2可灵活的将日志打印在控制台、通过SMTP邮件发送、记录至文件、保存至数据库。本文介绍如何配置log4j2将日志记录至数据库

建立用于保存日志的数据库表:

CREATE TABLE `sys_log` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`level` varchar(32) NOT NULL,

`logger` varchar(100) NOT NULL,

`message` varchar(1000) DEFAULT NULL,

`exception` varchar(10000) DEFAULT NULL,

`date_add` datetime NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4;

配置 databaseAppender :

其中 cc.s2m.web.s2mBlog.util.StaticProp 类的getDatabaseConnection方法为获取可用的datasource:

DriverManagerDataSource ds = new DriverManagerDataSource();

ds.setDriverClassName("com.MySQL.jdbc.Driver");

ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");

ds.setUsername("root");

ds.setPassword("123456");

return ds.getConnection();

然后指派您需要记录的日志,使用 databaseAppender 即可:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值