使用log4j讓日志寫入數據庫


之前做的一個項目有這么個要求,在日志管理系統里,需要將某些日志信息存儲到數據庫里,供用戶、管理員查看分析。因此我就花了點時間搞了一下這一功能,各位請看。
摘要:我們知道log4j能提供強大的可配置的記日志功能,有寫文件的、打印到控制台的等等,但有時我們需要它把日志輸出到后台數據庫中,log4j的強大的可擴展性支持了這一點,以下就是具體的實現
關鍵詞:log,log4j,日志,Java,DB,數據庫, slf4j
前提:已經配置好 slf4j、 log4j,能正常的往文件或控制台寫日志
需求:將日志寫入到數據庫中
說明:使用log4j-1.2.17.jar,slf4j-api-1.7.5.jar,slf4j-log4j12-1.6.6.jar。

 

步驟一:

你得先能寫入數據庫,編寫一個能往數據庫日志表中寫數據的接口,無論是WebService還是什么,這里假如是一個Java接口。
Log是定義的一個日志類,使用LogService對象調用logBll.add(Log log)方法即能夠向數據庫中添加一條日志信息。
1
2
3
4
5
6
7
8
9
public class Log {
     private Long id;
     private String logNum;
     private String userId;
     private Calendar time;
     private int type;
     private String content;
     ...
}

步驟二:

編寫一個繼承自 AppenderSkeleton類的類,並重寫它的append方法。在append方法里面,即調用了上一步定義的Java接口,logBll.add(log),向數據庫中寫入一條日志信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DBAppender extends AppenderSkeleton {
 
     private LogService logBLL = new LogService();
 
     @Override
     protected void append(LoggingEvent arg0) {
         if (!arg0.getLoggerName().startsWith(Constants.ProjetNS))
             return ;
         Log log = new Log();
         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  
以上文件主要增加配置了一個日志輸出方向,向數據庫輸出,並指定了具體的處理類。
在需要輸出日志的地方,正常的使用:
private  Logger logger = LoggerFactory . getLogger (SpringServiceSupport. class );
logger .error( ex);...即可。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM