【摘要】

本文主要介绍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

创建语句如下:

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配置文件

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

<?xml version="1.0"encoding="UTF-8"?>
<!-- 不打印log4j内部日志,配置文件刷新频率为30秒 -->
<Configuration status="off"monitorInterval="30">
<Appenders>
<JDBCname="log_database" tableName="ibs_log">
<ConnectionFactory class="com.*.*.ConnectionFactory"method="getDatabaseConnection" />
<Column name="log_date" isEventTimestamp="true"/>
<Column name="log_file" pattern="%file" />
<Column name="log_line" pattern="%line" />
<Column name="log_thread" pattern="%thread" />
<Column name="log_level" pattern="%level" />
<Column name="log_message" pattern="%message"/>
</JDBC>
</Appenders>
<Loggers>
<!-- 打印等级:off、fatal、error、warn、info、debug、trace、all -->
<Logger name="项目包名(com.*.*)" level="debug">
<appender-ref ref="databaseAppender"/>
</Logger>
<Root level="off"></Root>
</Loggers>
</Configuration>

1.3. 创建数据库连接类ConnectionFactory

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

【ConnectionFactory.java】

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

GenericObjectPool<PoolableConnection>pool = new GenericObjectPool<PoolableConnection>();
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

安装运行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配置文件

<?xml version="1.0"encoding="UTF-8"?>

<!--不打印log4j内部日志,配置文件刷新频率为30秒 -->
<Configuration status="off"monitorInterval="30">
<Appenders>
<NoSql name="databaseAppender">
<MongoDb databaseName="test"collectionName="logData" server="127.0.0.1"port="27017" userName="root"password="password"/>
</NoSql>
</Appenders>
<Loggers>
<!-- 打印等级:off、fatal、error、warn、info、debug、trace、all -->
<Logger name="com.*.*"level="debug">
<appender-ref ref="databaseAppender"/>
</Logger>
<Root level="off"></Root>
</Loggers>
</Configuration>

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

更多相关文章

  1. MySQL数据库总结(8)字符集与校对集
  2. 在MySQL数据库中存储无法访问的用户
  3. MySQL是一个非常流行的小型关系型数据库管理系统
  4. MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)
  5. 有没有一种方法可以在不破坏外键依赖关系的情况下将MySQL数据库
  6. 数据库中的结果分页如何工作?
  7. MySQL-数据库安装及基本SQL语句
  8. mysql去除严格模式/插入数据库遇到重复保证唯一
  9. MySQL数据库离线包安装与注册

随机推荐

  1. Android的多线程限制
  2. Android,似乎没那么友好......
  3. android4.0 添加一个新的android 键值
  4. Android编译系统分析大全
  5. Android 下面的一些命令
  6. Android安装和环境搭建
  7. 2019最新Android常用开源库总结(附带githu
  8. 在android中如何在代码中设置textview的
  9. Androd学习笔记——Android(安卓)Camera
  10. [Android UI界面] 求助大神!selector怎么