log4j 日誌輸出到數據庫

一、前提條件 

      系統必須是使用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;



發佈了36 篇原創文章 · 獲贊 17 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章