首页 > 学院 > 开发设计 > 正文

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

2019-11-11 03:33:50
字体:
来源:转载
供稿:网友
   【摘要】

    本文主要介绍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 在CODE上查看代码片派生到我的代码片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配置文件

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

[html] view plain copy 在CODE上查看代码片派生到我的代码片<?xml version="1.0"encoding="UTF-8"?>  <!-- 不打印log4j内部日志,配置文件刷新频率为30秒 -->   <Configuration status="off"monitorInterval="30">   <Appenders>           <JDBC name="databaseAppender" 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

[java] view plain copy 在CODE上查看代码片派生到我的代码片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配置文件

[html] view plain copy 在CODE上查看代码片派生到我的代码片<?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>  

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表