log4j| log4j-日誌記錄到數據庫

log4j API提供了 org.apache.log4j.jdbc.JDBCAppender 對象,該對象可以將日誌記錄信息放入指定的數據庫中。


JDBCAppender配置

屬性 描述
bufferSize 設置緩衝區的大小。默認大小爲1
driver 設置驅動程序類爲指定的字符串。如果沒有指定驅動程序類,默認爲sun.jdbc.odbc.JdbcOdbcDriver
layout 設置要使用的佈局。默認佈局是org.apache.log4j.PatternLayout
password 設置數據庫密碼。
sql 指定每次發生記錄事件時要執行的SQL語句。這可以是INSERT,UPDATE或DELETE。
URL 設置JDBC URL。
URL 設置JDBC URL。
user 設置數據庫用戶名。

日誌表配置

在開始使用基於JDBC的日誌記錄之前,應創建一個表來維護所有日誌信息。以下是用於創建LOGS表的SQL語句-

CREATE TABLE LOGS
   (USER_ID VARCHAR(20)    NOT NULL,
    DATED   DATE           NOT NULL,
    LOGGER  VARCHAR(50)    NOT NULL,
    LEVEL   VARCHAR(10)    NOT NULL,
    MESSAGE VARCHAR(1000)  NOT NULL
   );

配置文件示例

以下是JDBCAppender 的示例配置文件log4j.properties,該文件將用於將消息記錄到LOGS表中。

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

對於MySQL數據庫,您將必須使用實際的DBNAME,用戶ID和密碼,並在其中創建了LOGS表。該SQL語句將執行INSERT語句,該語句的表名稱爲LOGS並在表中輸入值。
JDBCAppender不需要顯式定義佈局。相反,傳遞給它的SQL語句使用PatternLayout。

如果您希望擁有一個與上述 log4j.properties 文件等效的XML配置文件,那麼這裏的內容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:mysql://localhost/DBNAME"/>
   <param name="driver" value="com.mysql.jdbc.Driver"/>
   <param name="user" value="user_id"/>
   <param name="password" value="password"/>
   <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>
   
   <layout class="org.apache.log4j.PatternLayout">
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>

示例程序

以下Java類是一個非常簡單的示例,該示例初始化Java應用程序的Log4J日誌記錄庫,然後使用它。

import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Debug");
      log.info("Info");
   }
}

編譯執行

這是編譯和運行上述程序的步驟。在繼續進行編譯和執行之前,請確保已正確設置了 PATHCLASSPATH

所有庫都應該在 CLASSPATH 中可用,而您的 log4j.properties 文件應該在PATH中可用。遵循以下幾點:

  • 如上所示創建log4j.properties。
  • 如上所示創建log4jExample.java並進行編譯。
  • 執行log4jExample二進制文件以運行程序。

現在檢查DBNAME數據庫中的LOGS表,您將找到以下條目(記錄):

mysql >  select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED      | LOGGER       | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|         | 2010-05-13 | log4jExample | DEBUG | Debug   |
|         | 2010-05-13 | log4jExample | INFO  | Info    |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

注: 此處 x 用於輸出與生成日誌事件的線程關聯的嵌套診斷上下文(NDC)。我們使用NDC來區分處理多個客戶端的服務器端組件中的客戶端。有關更多信息,請參見Log4J手冊。

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