- log4j 教程
- log4j - 首頁
- log4j - 概述
- log4j - 安裝
- log4j - 架構
- log4j - 配置
- log4j - 示例程式
- log4j - 日誌記錄方法
- log4j - 日誌級別
- log4j - 日誌格式
- log4j - 檔案日誌記錄
- log4j - 資料庫日誌記錄
- log4j 有用資源
- log4j - 常見問題解答
- log4j - 快速指南
- log4j - 有用資源
- 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。 |
| 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:///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:///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 類是一個非常簡單的示例,它初始化然後使用 Log4J 日誌記錄庫用於 Java 應用程式。
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");
}
}
編譯和執行
以下是編譯和執行上述程式的步驟。在繼續進行編譯和執行之前,請確保您已正確設定了 **PATH** 和 **CLASSPATH**。
所有庫都應在 **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 手冊。
廣告