Log4j介紹:
- 通過使用Log4j,控制日誌信息輸送的目的地可以爲控制檯、文件、數據庫、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;
- 可以控制每一條日誌的信息內容和信息輸出格式;
- 通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程;
日誌級別:
- OFF:關閉了日誌信息
- FATAL:可能導致應用中止的嚴重事件錯誤
- ERROR:嚴重錯誤,主要是程序的錯誤
- WARN:一般警告,比如session丟失
- INFO:一般要顯示的信息,比如登錄登出
- DEBUG:程序的調試信息
- TRACE:比DEBUG更細粒度的事件信息
- ALL:打開所有級別的日誌
log4j提供了一系列的Appender,允許將日誌輸出到不同的地方,如控制檯、文件、數據庫等。
項目中的應用:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <scope>runtime</scope> </dependency>
import org.slf4j.LoggerFactory;private static Logger logger = LoggerFactory.getLogger(DeviceLoadConfigServiceImpl.class);
logger.warn(LOGGERINFO+"getDevConnectConfigByDeviceUid參數缺失marketId:"+deviceUid);
#Console Log
#log4j根配置語法:
#作用:把指定級別的日誌信息 輸出到指定的一個或多個位置
log4j.rootLogger=DEBUG,INFO,WARN,ERROR , console, file,logDB
# Write to Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n
#Write to File
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.Threshold = INFO
log4j.appender.file.File=${catalina.home}log/provider.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%5p %d{MM-dd HH:mm:ss}(%F:%L): %m%n
#將日誌登錄到MySQL數據庫
log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
log4j.appender.logDB.Threshold = ERROR
log4j.appender.logDB.Driver = com.mysql.jdbc.Driver
log4j.appender.logDB.URL = jdbc:mysql://127.0.0.1:3306/gaas?characterEncoding=UTF-8
log4j.appender.logDB.User = root
log4j.appender.logDB.Password = 63594242
log4j.appender.logDB.Sql = INSERT INTO log4j (project_name,create_date,level,category,file_name,thread_name,line,all_category,message)VALUES('saas','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')
#配置某些類輸出級別
log4j.logger.org.springframework.amqp.rabbit.listener.BlockingQueueConsumer=INFO,WARN,ERROR
og4j.logger.org.springframework.core.task.SimpleAsyncTaskExecutor=INFO,WARN,ERROR
############################################################################################################################################# #①配置根Logger,其語法爲: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日誌記錄的優先級,分爲OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL ##Log4j建議只使用四個級別,優先級從低到高分別是DEBUG,INFO,WARN,ERROR #通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關 #比如在這裏定義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來 #appenderName就是指定日誌信息輸出到哪個地方。可同時指定多個輸出目的 ################################################################################ ################################################################################ #②配置日誌信息輸出目的地Appender,其語法爲: # #log4j.appender.appenderName = fully.qualified.name.of.appender.class #log4j.appender.appenderName.optionN = valueN # #Log4j提供的appender有以下幾種: #1)org.apache.log4j.ConsoleAppender(輸出到控制檯) #2)org.apache.log4j.FileAppender(輸出到文件) #3)org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件) #4)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件) #5)org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方) # #1)ConsoleAppender選項屬性 # -Threshold = DEBUG:指定日誌消息的輸出最低層次 # -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 # -Target = System.err:默認值System.out,輸出到控制檯(err爲紅色,out爲黑色) # #2)FileAppender選項屬性 # -Threshold = INFO:指定日誌消息的輸出最低層次 # -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 # -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件 # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 # -Encoding = UTF-8:可以指定文件編碼格式 # #3)DailyRollingFileAppender選項屬性 # -Threshold = WARN:指定日誌消息的輸出最低層次 # -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 # -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件 # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 # -DatePattern='.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。還可以按用以下參數: # '.'yyyy-MM:每月 # '.'yyyy-ww:每週 # '.'yyyy-MM-dd:每天 # '.'yyyy-MM-dd-a:每天兩次 # '.'yyyy-MM-dd-HH:每小時 # '.'yyyy-MM-dd-HH-mm:每分鐘 # -Encoding = UTF-8:可以指定文件編碼格式 # #4)RollingFileAppender選項屬性 # -Threshold = ERROR:指定日誌消息的輸出最低層次 # -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 # -File = C:/log4j.log:指定消息輸出到C:/log4j.log文件 # -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 # -MaxFileSize = 100KB:後綴可以是KB,MB,GB.在日誌文件到達該大小時,將會自動滾動.如:log4j.log.1 # -MaxBackupIndex = 2:指定可以產生的滾動文件的最大數 # -Encoding = UTF-8:可以指定文件編碼格式 ################################################################################ ################################################################################ #③配置日誌信息的格式(佈局),其語法爲: # #log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class #log4j.appender.appenderName.layout.optionN = valueN # #Log4j提供的layout有以下幾種: #5)org.apache.log4j.HTMLLayout(以HTML表格形式佈局) #6)org.apache.log4j.PatternLayout(可以靈活地指定佈局模式) #7)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串) #8)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息) #9)org.apache.log4j.xml.XMLLayout(以XML形式佈局) # #5)HTMLLayout選項屬性 # -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 # -Title=Struts Log Message:默認值 Log4J Log Messages # #6)PatternLayout選項屬性 # -ConversionPattern = %m%n:格式化指定的消息(參數意思下面有) # #9)XMLLayout選項屬性 # -LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 # #Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下: # %m 輸出代碼中指定的消息 # %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL # %r 輸出自應用啓動到輸出該log信息耗費的毫秒數 # %c 輸出所屬的類目,通常就是所在類的全名 # %t 輸出產生該日誌事件的線程名 # %n 輸出一個回車換行符,Windows平臺爲“\r\n”,Unix平臺爲“\n” # %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式 # 如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},輸出類似:2012年01月05日 22:10:28,921 # %l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數 # 如:Testlog.main(TestLog.java:10) # %F 輸出日誌消息產生時所在的文件名稱 # %L 輸出代碼中的行號 # %x 輸出和當前線程相關聯的NDC(嵌套診斷環境),像java servlets多客戶多線程的應用中 # %% 輸出一個"%"字符 # # 可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: # %5c: 輸出category名稱,最小寬度是5,category<5,默認的情況下右對齊 # %-5c:輸出category名稱,最小寬度是5,category<5,"-"號指定左對齊,會有空格 # %.5c:輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不會有空格 # %20.30c:category名稱<20補空格,並且右對齊,>30字符,就從左邊交遠銷出的字符截掉 ################################################################################ ################################################################################ #④指定特定包的輸出特定的級別 #log4j.logger.org.springframework=DEBUG ################################################################################ #OFF,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB,ALL #log4j.rootLogger =info, console, file ##輸出到控制檯 #log4j.appender.systemOut = org.apache.log4j.ConsoleAppender #log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout #log4j.appender.systemOut.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n #log4j.appender.systemOut.Threshold = DEBUG #log4j.appender.systemOut.ImmediateFlush = TRUE #log4j.appender.systemOut.Target = System.out # ##輸出到文件 #log4j.appender.logFile = org.apache.log4j.FileAppender #log4j.appender.logFile.layout = org.apache.log4j.PatternLayout #log4j.appender.logFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n #log4j.appender.logFile.Threshold = DEBUG #log4j.appender.logFile.ImmediateFlush = TRUE #log4j.appender.logFile.Append = TRUE #log4j.appender.logFile.File = ${catalina.home}/log/provider.log #log4j.appender.logFile.Encoding = UTF-8 # ##按DatePattern輸出到文件 #log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender #log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout #log4j.appender.logDailyFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n #log4j.appender.logDailyFile.Threshold = DEBUG #log4j.appender.logDailyFile.ImmediateFlush = TRUE #log4j.appender.logDailyFile.Append = TRUE #log4j.appender.logDailyFile.File = ${catalina.home}/log/DailyFile/log4j #log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm'.log' #log4j.appender.logDailyFile.Encoding = UTF-8 # ##設定文件大小輸出到文件 #log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender #log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout #log4j.appender.logRollingFile.layout.ConversionPattern = [%-5p][%-22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n #log4j.appender.logRollingFile.Threshold = DEBUG #log4j.appender.logRollingFile.ImmediateFlush = TRUE #log4j.appender.logRollingFile.Append = TRUE #log4j.appender.logRollingFile.File = ${catalina.home}/log/RollingFile/log4j.log #log4j.appender.logRollingFile.MaxFileSize = 1MB #log4j.appender.logRollingFile.MaxBackupIndex = 10 #log4j.appender.logRollingFile.Encoding = UTF-8 #用Email發送日誌 #log4j.appender.logMail = org.apache.log4j.net.SMTPAppender #log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout #log4j.appender.logMail.layout.LocationInfo = TRUE #log4j.appender.logMail.layout.Title = WondWare Mail LogFile #log4j.appender.logMail.Threshold = ERROR #log4j.appender.logMail.SMTPDebug = FALSE #log4j.appender.logMail.SMTPHost = smtp.163.com #log4j.appender.logMail.From = [email protected] #log4j.appender.logMail.To = [email protected] ##log4j.appender.logMail.Cc = [email protected] ##log4j.appender.logMail.Bcc = [email protected] #log4j.appender.logMail.SMTPUsername = [email protected] #log4j.appender.logMail.SMTPPassword = 3341566 #log4j.appender.logMail.Subject = Log4j Log Messages ##log4j.appender.logMail.BufferSize = 1024 #log4j.appender.logMail.SMTPAuth = TRUE #將日誌登錄到MySQL數據庫 #log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender #log4j.appender.logDB.layout = org.apache.log4j.PatternLayout #log4j.appender.logDB.Driver = com.mysql.jdbc.Driver #log4j.appender.logDB.URL = jdbc:mysql://139.196.252.205:3306/gaas?characterEncoding=UTF-8 #log4j.appender.logDB.User = root #log4j.appender.logDB.Password = 63594242 #log4j.appender.logDB.Sql = INSERT INTOT log4j (project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('Struts2','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m') #log4j.rootCategory=DEBUG,INFO, stdout , R #log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n #log4j.appender.R=org.apache.log4j.DailyRollingFileAppender ##log4j.appender.R.File=e:\\test\\avatar.log ### linux logs file path ##log4j.appender.R.File=${com.hsinghsu.testSSH.webapp.root}/log/testlog.log ### Windows logs file path #log4j.appender.R.File=${catalina.home}/log/providers.log #log4j.appender.R.layout=org.apache.log4j.PatternLayout ##log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n ##log4j.logger.com.neusoft=DEBUG ##log4j.logger.com.opensymphony.oscache=ERROR #log4j.logger.net.sf.navigator=INFO ##log4j.logger.org.apache.commons=ERROR ##log4j.logger.org.apache.struts=WARN ##log4j.logger.org.displaytag=ERROR ## #log4j.logger.org.springframework=INFO ## ##log4j.logger.com.ibatis.db=WARN ##log4j.logger.org.apache.velocity=FATAL ##log4j.logger.com.canoo.webtest=WARN ##log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN ##log4j.logger.org.hibernate=DEBUG #log4j.logger.org.hibernate=INFO ##log4j.logger.org.logicalcobwebs=WARN