| 之前做的一個(gè)項(xiàng)目有這么個(gè)要求,在日志管理系統(tǒng)里,需要將某些日志信息存儲(chǔ)到數(shù)據(jù)庫里,供用戶、管理員查看分析。因此我就花了點(diǎn)時(shí)間搞了一下這一功能 ,各位請(qǐng)看。 摘要:我們知道log4j能提供強(qiáng)大的可配置的記日志功能,有寫文件的、打印到控制臺(tái)的等等,但有時(shí)我們需要它把日志輸出到后臺(tái)數(shù)據(jù)庫中,log4j的強(qiáng)大的可擴(kuò)展性支持了這一點(diǎn),以下就是具體的實(shí)現(xiàn)。 關(guān)鍵詞:log,log4j,日志,Java,DB,數(shù)據(jù)庫,slf4j 前提:已經(jīng)配置好slf4j、log4j,能正常的往文件或控制臺(tái)寫日志。 需求:將日志寫入到數(shù)據(jù)庫中。 說明:使用log4j-1.2.17.jar,slf4j-api-1.7.5.jar,slf4j-log4j12-1.6.6.jar。 
  步驟一:你得先能寫入數(shù)據(jù)庫,編寫一個(gè)能往數(shù)據(jù)庫日志表中寫數(shù)據(jù)的接口,無論是WebService還是什么,這里假如是一個(gè)Java接口。Log是定義的一個(gè)日志類,使用LogService對(duì)象調(diào)用logBll.add(Log log)方法即能夠向數(shù)據(jù)庫中添加一條日志信息。
 
| 1 2 3 4 5 6 7 8 9 | 
publicclassLog {
     privateLong id;
     privateString logNum;
     privateString userId;
     privateCalendar time;
     privateinttype;
     privateString content;
     ...
 }
 |  
 步驟二:編寫一個(gè)繼承自AppenderSkeleton類的類,并重寫它的append方法。在append方法里面,即調(diào)用了上一步定義的Java接口,logBll.add(log),向數(shù)據(jù)庫中寫入一條日志信息。 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 
publicclassDBAppender extendsAppenderSkeleton {
     privateLogService logBLL = newLogService();
     @Override
     protectedvoidappend(LoggingEvent arg0) {
         if(!arg0.getLoggerName().startsWith(Constants.ProjetNS))
             return;
         Log log = newLog();
         log.setType(arg0.getLevel().toInt());
         log.setTime(Calendar.getInstance());
         log.setUserId("system");
         log.setContent(arg0.getRenderedMessage());
         logBll.add(log);
     }
 }
 |  
  步驟三:改新log4j.properties配置文件,類似如下所示。   
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 
# Root logger option
 log4j.rootLogger=WARN, stdout, file, db
 # Direct log messages to stdout
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.Target=System.out
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
 log4j.appender.file.File = logs/log.log
 log4j.appender.file.Append = true
 log4j.appender.file.Threshold = ERROR
 log4j.appender.file.layout = org.apache.log4j.PatternLayout
 log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
 log4j.appender.db = com.aitanjupt.angel.log.DBAppender
 |  以上文件主要增加配置了一個(gè)日志輸出方向,向數(shù)據(jù)庫輸出,并指定了具體的處理類。 在需要輸出日志的地方,正常的使用: private Logger logger = LoggerFactory.getLogger(SpringServiceSupport.class); logger.error(ex);...即可。 |