log4j日誌配置——Console+Database+E-Mail


一:Log4j基礎


Log4j由三個重要的組件構成:
Loggers日誌信息的優先級
Appenders:日誌信息的輸出目的地
Layout:日誌信息的輸出格式


日誌信息的優先級從高到低依次是
  • OFF
  • FATAL
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • ALL

二:準備工作


log4J本身需要的jar包:log4j-.jar、commons-logging-xxx.jar、slf4j-api-xxx.jar、slf4j-log4j12-xxx.jar
配置E-Mail依賴的jar包:mail.jar 、activation.jar。

三:具體配置


1.整體配置

log4j.logger.com.saleSystem.aop.LogAdvice=INFO,DATABASE
#log4j.logger.org.hibernate.tool.hbm2ddl=WARN


log4j.rootLogger=DEBUG,Console,OneFile,HtmlFile,MAIL
log4j.logger.com.opensymphony.xwork2=WARN


#print sql parameter
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder= TRACE
#log4j.logger.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE


#log4j.logger.org.hibernate.SQL=DEBUG
#struts
#配置Log4j中包的輸出級別
關閉Spring hibernate struts2不必要的日誌
log4j.logger.org.apache.struts2=WARN
log4j.logger.org.apache.commons=WARN
log4j.logger.org.apache.cxf=WARN
#spring
log4j.logger.org.springframework = WARN
#Hibernate
log4j.logger.org.hibernate.ps.PreparedStatementCache= WARN
log4j.logger.org.hibernate=WARN


#print to the console
#Appender.Threshold logger's level (DEBUG|ERROR|INFO)
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%p][%d{yyyy -MM-dd HH\:mm\: ss,SSS}][%c]%m[%X{userId}]%n


#OneFile output to file
log4j.appender.OneFile=org.apache.log4j.RollingFileAppender
log4j.appender.OneFile.File=../log/saleSystem.log 
log4j.appender.OneFile.MaxFileSize=10MB
log4j.appender.OneFile.Threshold=ALL
#backups file number
log4j.appender.OneFile.MaxBackupIndex = 3
log4j.appender.OneFile.layout=org.apache.log4j.PatternLayout
log4j.appender.OneFile.layout.ConversionPattern= [%p][%d{yyyy -MM-dd HH\:mm\: ss,SSS}][%c]%m%n


#log4j日循環日誌需要次日生成
明天才會生成tomcat.log.2010-9-9
今天的日誌不會跟日期作爲後綴的 
log4j.appender.HtmlFile=org.apache.log4j.DailyRollingFileAppender #每天會生成一個日誌文件,以.html結尾
log4j.appender.HtmlFile.file=../log/saleSystem_log
log4j.appender.HtmlFile.DatePattern='-'yyyy-MM-dd'.html' 
log4j.appender.HtmlFile.layout=org.apache.log4j.HTMLLayout
log4j.appender.HtmlFile.Threshold=ALL


#配置通過郵件通知,最低級別是ERROR,如果需要更低需要重寫Log4j的代碼
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10 #10條一起發
[email protected]
log4j.appender.MAIL.SMTPHost=smtp.qq.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.SMTPDebug=false
[email protected]
log4j.appender.MAIL.SMTPPassword=password(自己的密碼)
[email protected]
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


#配置輸出到數據庫
#logger.com.test,把com.saleSystem.aop.LogAdvice java類中的日誌輸出到數據庫DATABASE中,必須置於log4j.rootLogger之上  
log4j.logger.com.test=INFO,L1  
log4j.logger.com.saleSystem.aop.LogAdvice= INFO,DATABASE
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4salesystem
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.BufferSize=1
log4j.appender.DATABASE.password=19930815
log4j.appender.DATABASE.Threshold=INFO
#數據庫的輸出語句
log4j.appender.DATABASE.sql=INSERT INTO oper_log(OPER_MAN,OPER_TIME,OPER_MODULE,OPER_OPTION,OPER_CON) VALUES ('%X{OPER_MAN}','%X{OPER_TIME}','%X{OPER_MODULE}','%X{OPER_OPTION}','%m')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern= [framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n


2.配置輸出到E-Mail


#配置通過郵件通知,最低級別是ERROR,如果需要更低需要重寫Log4j的代碼
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10 #10條一起發
[email protected]
log4j.appender.MAIL.SMTPHost=smtp.qq.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.SMTPDebug=false
[email protected]
log4j.appender.MAIL.SMTPPassword=password(自己的密碼)
[email protected]
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

  • log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender:配置輸出類型
  • log4j.appender.MAIL.BufferSize=10:緩存10條,當輸出到E-Mail的日誌到達10條後,將發送郵件給指定郵箱
  • log4j.appender.MAIL.Threshold=FATAL:輸出的級別爲致命性錯誤
  • log4j.appender.MAIL.From:發送郵件的郵箱
  • log4j.appender.MAIL.Subject:郵件主題
  • log4j.appender.MAIL.SMTPHost:郵箱服務器
  • log4j.appender.MAIL.SMTPUsername:郵箱用戶名
  • log4j.appender.MAIL.SMTPPassword:郵箱密碼

3.輸出到數據庫

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4salesystem
#log4j.appender.DATABASE.URL=jdbc:mysql://192.168.1.125:3306/log4salesystem
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.BufferSize=1 
#log4j.appender.DATABASE.password=12345679
log4j.appender.DATABASE.password=19930815
log4j.appender.DATABASE.sql=INSERT INTO oper_log(OPER_MAN,OPER_TIME,OPER_MODULE,OPER_OPTION,OPER_CON) VALUES ('%X{OPER_MAN}','%X{OPER_TIME}','%X{OPER_MODULE}','%X{OPER_OPTION}','%m')
log4j.appender.DATABASE.Threshold=INFO
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

  • log4j.appender.DATABASE:輸出類型
  • log4j.appender.DATABASE.URL:輸出地址
  • log4j.appender.DATABASE.driver:輸出驅動,mysql數據庫
  • log4j.appender.DATABASE.user:數據庫用戶名
  • log4j.appender.DATABASE.password:數據庫密碼
  • log4j.appender.DATABASE.sql:數據庫插入語句
  • log4j.appender.DATABASE.Threshold:輸出級別
  • log4j.appender.DATABASE.BufferSize=1 :緩存1條

log4j.logger.com.saleSystem.aop.LogAdvice=INFO,DATABASE

把com.saleSystem.aop.LogAdvicejava類中的日誌輸出到數據庫DATABASE中,必須置於log4j.rootLogger之上  

log4j.rootLogger=DEBUG,Console,OneFile,HtmlFile,MAIL

%X{OPER_MAN}、%X{OPER_TIME}','%X{OPER_MODULE}','%X{OPER_OPTION}是怎麼來的?

從MDC中得到! MDC內部使用了類似map的機制來存儲信息,上下文信息也是每個線程獨立地儲存,所不同的是信息都是以它們的key值存儲在”map”中。相對應的方法,MDC.put(key, value); MDC.remove(key); MDC.get(key);在配置PatternLayout的時候使用:%x{key}來輸出對應的value



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