Log4j2記錄日誌到數據庫(MySQL&MongoDB)

【摘要】

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

!!!至此就可以運行項目測試了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章