一、前提條件 系統必須是使用LOG4J進行日誌管理,否則方法無效。 系統必須包含commons-logging-xxx.jar,log4j-xxx.jar這兩個JAR包,XXX爲版本號。 二、操作步驟 1、創建日誌表 要把日誌持久化,必須在數據庫中創建一張用來存儲日誌信息的表,表內字段爲日誌 的一個主要屬性包括:操作類,執行方法,打印時間,日誌級別,日誌內容。 CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL, CLASS VARCHAR2(200), METHOD VARCHAR2(100), CREATETIME DATE, LOGLEVEL VARCHAR2(50), MSG VARCHAR2(4000)) 因爲存儲的類爲類的全部路徑,所以CLASS字段長度需要比較大。 2、日誌管理配置 LOG4J主要有兩種配置文件.properties和.xml,這裏以properties文件爲基礎來講 述,關於XML文件的配置,相信大家看完下面的介紹也一樣能輕鬆完成。 通常在LOG4J.PROPERTIES文件的第一行是: log4j.rootLogger= XXX,這句是控制日誌的輸出,如果想吧日誌輸出到數據庫, 則需要在XXX中添加“DB”,如log4j.rootLogger=INFO,stdout,Platform,db。上面 這句就是把日誌中級別爲INFO的信息輸出到STDOUT,PLATFORM和DB (DATABASE)中。 配置好如上的信息,LOG4J就知道用戶是想把信息存入數據庫,接下來我們就要來 配置數據庫的相關信息(包括緩存,數據庫連接信息,和執行SQL),配置信息如下: ###JDBCAppender log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender //這個配置是選擇使用JDBCAppender方法,將日誌信息存儲到數據庫。當然,如果你還要做其他操作,可以自己寫個類,繼承JDBCAppender就OK了。 log4j.appender.db.BufferSize=1 //這個配置是告訴LOG4J,有多少條日誌信息後才存入數據庫,我這裏是1,就是說有一條就查一條,顯然這樣在生產環境下是很影響系統性能的。 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver //這個配置是告訴LOG4J,做數據庫存儲所用的驅動。 log4j.appender.db.URL=jdbc:oracle:thin:@<ip>:<port>:<sid> //這個配置數據庫連接的URL,不用說也都知道。 log4j.appender.db.user=XXX log4j.appender.db.password=XXX //上面兩個是數據庫連接時的用戶名和密碼 log4j.appender.db.sql=insert into RESLOG (LogId,Class,Method,createTime,LogLevel,MSG) values (SQ_RESLOG_LOGID.Nextval,'%C','%M', to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd HH24:mi:ss'),'%p','%m') //這個配置是告訴當LOG4J吧日誌存儲數據庫時用的SQL語句。SQ_RESLOG_LOGID.Nextval是我建的一個SEQUENCE;‘%C’是日誌中的CLASS;‘%M’是打印日誌是執行到類裏的方法;‘%d’是打印的時間,它支持格式化;‘%P’是日誌級別,包括INFO、DEBUG、ERROR等;‘%m’是MSG,日誌內容。注意這裏的參數區分大小寫。 log4j.appender.db.layout=org.apache.log4j.PatternLayout 通過上面的配置,現在再啓動服務,LOG4J就會自動把原來存儲在.LOG文件中的信息,同時存儲到數據庫了。
-----------------------例子:mysql
log4j.rootLogger=debug,stdout,R,db
########################################JDBCAppender
log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize=10
log4j.appender.db.driver=com.mysql.jdbc.Driver
log4j.appender.db.URL=jdbc:mysql://134.32.32.122:9527/LOG_GATEWAY?useUnicode=true&characterEncoding=GBK
log4j.appender.db.user=jzgjxj
log4j.appender.db.password=abcd1234
log4j.appender.db.sql=INSERT INTO JINAN(USER_ID,LOGGER,LEVEL,MESSAGE) VALUES('191','%C','%p','%m')
log4j.appender.db.layout=org.apache.log4j.PatternLayout
log4j.appender.db.Threshold=WARN
########################################JDBCAppender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout.ConversionPattern=%-5p %l%n%4x- %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log/log.txt
log4j.appender.R.MaxFileSize=10240KB
log4j.appender.R.MaxBackupIndex=9
log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-4r %-5p [%t %c - %m%n
log4j.appender.R.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss} %l %-4r [%t\r\n - %m%n
log4j.logger.com.tidestone.xj.corba.topoResource.TopSyncTask=debug,TopSyncTasklog
log4j.logger.com.tidestone.xj.corba.helper.PathRouteHelper=debug,TopSyncTasklog
log4j.logger.com.tidestone.xj.corba.topoResource.EmsData2NmsDataWorker=debug,TopSyncTasklog
log4j.appender.TopSyncTasklog=org.apache.log4j.RollingFileAppender
log4j.appender.TopSyncTasklog.layout=org.apache.log4j.PatternLayout
log4j.appender.TopSyncTasklog.layout.ConversionPattern=%-5p %d{MM-dd HH:mm:ss} %l%n%4x- %m%n
log4j.appender.TopSyncTasklog.File=log/TopSyncTaskLog.txt
log4j.appender.TopSyncTasklog.MaxFileSize=1000KB
log4j.appender.TopSyncTasklog.MaxBackupIndex=9
創建數據庫:
DROP TABLE IF EXISTS `RAISECOM_JN`;
CREATE TABLE `RAISECOM_JN` (
`USER_ID` varchar(20) DEFAULT NULL,
`DATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`LOGGER` varchar(500) DEFAULT NULL,
`LEVEL` varchar(100) DEFAULT NULL,
`MESSAGE` varchar(5000) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;