亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用slf4j和Log4j構建日志

2019-11-10 17:28:54
字體:
來源:轉載
供稿:網友

使用slf4j和Log4j構建日志

SLF4J,即簡單日志門面(Simple Logging Facade for java),不是具體的日志解決方案,它只服務于各種各樣的日志系統。按照官方的說法,SLF4J是一個用于日志系統的簡單Facade,允許最終用戶在部署其應用時使用其所希望的日志系統。

實際上,SLF4J所提供的核心API是一些接口以及一個LoggerFactory的工廠類。從某種程度上,SLF4J有點類似JDBC,不過比JDBC更簡單,在JDBC中,你需要指定驅動程序,而在使用SLF4J的時候,不需要在代碼中或配置文件中指定你打算使用那個具體的日志系統。如同使用JDBC基本不用考慮具體數據庫一樣,SLF4J提供了統一的記錄日志的接口,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過具體日志系統的配置來實現,因此可以在應用中靈活切換日志系統。

如果你開發的是類庫或者嵌入式組件,那么就應該考慮采用SLF4J,因為不可能影響最終用戶選擇哪種日志系統。在另一方面,如果是一個簡單或者獨立的應用,確定只有一種日志系統,那么就沒有使用SLF4J的必要。假設你打算將你使用log4j的產品賣給要求使用JDK 1.4 Logging的用戶時,面對成千上萬的log4j調用的修改,相信這絕對不是一件輕松的事情。但是如果開始便使用SLF4J,那么這種轉換將是非常輕松的事情。

--------正式開始

簡單的JAVA工程

JAR包 下載地址:https://www.slf4j.org/和http://logging.apache.org/log4j/1.2/

log4j-1.2.17.jar  slf4j-api-1.7.22.jar   slf4j-log4j12-1.7.22.jar

log4j.PRoperties配置文件

最近使用log4j寫log時候發現網上的寫的都是千篇一律,寫的好的嘛不全,寫的全一點的嘛沒有一點格式,看著累。這里把網上收集到的整理了一下,并且全部都在機器上測試成功了。

##等級可分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF則不打出任何信息,#如果配置為INFO這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示# 此句為將等級為ALL的日志信息輸出到stdout和E這兩個目的地log4j.rootLogger=ALL,stdout,E##此句為定義名為stdout的輸出端是哪種類型,可以是#org.apache.log4j.ConsoleAppender(控制臺),#org.apache.log4j.FileAppender(文件),#org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),#org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)#org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方)#log4j.appender.stdout=org.apache.log4j.ConsoleAppender   ##此句為定義名為stdout的輸出端的layout是哪種類型,可以是#org.apache.log4j.HTMLLayout(以HTML表格形式布局),#org.apache.log4j.PatternLayout(可以靈活地指定布局模式),#org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),#org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等信息)#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  ##如果使用pattern布局就要指定的打印信息的具體格式ConversionPattern,打印參數如下:#%m 輸出代碼中指定的消息#%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL#%r 輸出自應用啟動到輸出該log信息耗費的毫秒數#%c 輸出所屬的類目,通常就是所在類的全名#%t 輸出產生該日志事件的線程名#%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”#%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921#%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。#[PPL]是log信息的開頭,可以為任意字符,一般為項目簡稱。#log4j.appender.stdout.layout.ConversionPattern=[PPL] %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %C.%M(%L) | %m%n ###org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)log4j.appender.E = org.apache.log4j.DailyRollingFileAppender#定義名為R的輸出端的文件名為C:/tmp/logs.loglog4j.appender.E.File = C://tmp//logs.log#默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容log4j.appender.E.Append = true#可以指定文件編碼格式log4j.appender.E.Encoding = UTF-8#指定日志消息的輸出最低層次log4j.appender.E.Threshold = DEBUG# -DatePattern='.'yyyy-ww:每周滾動一次文件,即每周產生一個新的文件。還可以按用以下參數: #              '.'yyyy-MM:每月 #              '.'yyyy-ww:每周 #              '.'yyyy-MM-dd:每天 #              '.'yyyy-MM-dd-a:每天兩次 #              '.'yyyy-MM-dd-HH:每小時 #              '.'yyyy-MM-dd-HH-mm:每分鐘 #log4j.appender.E.DatePattern='.'yyyy-MM-ddlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern =[PPL] %-d{yyyy-MM-dd HH:mm:ss} %p [%t] %C.%M(%L) | %m%n ################################################################################ ##                               以下是參考示例                                                     #### ################################################################################ #①配置根Logger,其語法為: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日志記錄的優先級,分為OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL ##Log4j建議只使用四個級別,優先級從低到高分別是DEBUG,INFO,WARN,ERROR #通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關 #比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來 #appenderName就是指定日志信息輸出到哪個地方??赏瑫r指定多個輸出目的 ################################################################################ ################################################################################ #②配置日志信息輸出目的地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 =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB #輸出到控制臺 #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 = ../Struts2/WebRoot/log/File/log4j_Struts.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 = ../Struts2/WebRoot/log/DailyFile/log4j_Struts #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 = ../Struts2/WebRoot/log/RollingFile/log4j_Struts.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 = Struts2 Mail LogFile #log4j.appender.logMail.Threshold = DEBUG #log4j.appender.logMail.SMTPDebug = FALSE #log4j.appender.logMail.SMTPHost = SMTP.163.com #log4j.appender.logMail.From = xly3000@163.com #log4j.appender.logMail.To = xly3000@gmail.com ##log4j.appender.logMail.Cc = xly3000@gmail.com ##log4j.appender.logMail.Bcc = xly3000@gmail.com #log4j.appender.logMail.SMTPUsername = xly3000 #log4j.appender.logMail.SMTPPassWord = 1234567 #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://127.0.0.1:3306/xly #log4j.appender.logDB.User = root #log4j.appender.logDB.Password = 123456 #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')##測試代碼

package com.ppl.test;import org.junit.Test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class Slf4jTest {	Logger logger = LoggerFactory.getLogger(Slf4jTest.class);		@Test	public void test1(){				logger.info("abcdef");		logger.debug("debug");			}}測試結果

[PPL] 2017-02-08 20:56:59 INFO [main] com.ppl.test.Slf4jTest.test1(14) | abcdef[PPL] 2017-02-08 20:56:59 DEBUG [main] com.ppl.test.Slf4jTest.test1(15) | debug


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美另类在线播放| 久久琪琪电影院| 国产欧美 在线欧美| 亚洲qvod图片区电影| 欧美在线视频免费观看| 国产一区二区三区三区在线观看| 免费av一区二区| 午夜精品一区二区三区av| 成人久久久久久久| 久久99精品久久久久久琪琪| 日韩黄色高清视频| 亚洲人成电影在线| 日韩精品极品在线观看| 亚洲国产精品久久| 最近更新的2019中文字幕| 国产精品久久中文| 伊人一区二区三区久久精品| 国产精品成人免费视频| 国产一区在线播放| 亚洲精品99久久久久中文字幕| 久久综合伊人77777| 韩国三级电影久久久久久| 欧美成人久久久| 日韩av有码在线| 日韩一区二区三区在线播放| 韩国日本不卡在线| 91av在线精品| 97视频网站入口| 欧美孕妇与黑人孕交| 亚洲精品美女在线观看播放| 久久久久久亚洲精品| 久久久久久久久综合| 欧美一区二区三区艳史| 97婷婷大伊香蕉精品视频| 欧美激情xxxxx| 在线日韩欧美视频| 成人激情视频网| 国产精品视频永久免费播放| 国产成人午夜视频网址| 亚洲永久免费观看| 日韩电影在线观看免费| 亚洲国产精品久久精品怡红院| www.久久色.com| 欧美激情在线观看视频| 欧美大码xxxx| 国产成人亚洲综合| 久久琪琪电影院| 亚洲精品乱码久久久久久金桔影视| 亚洲精品自产拍| 97在线视频免费观看| 91亚洲精品久久久久久久久久久久| 日韩免费观看高清| 久久久久久久久久久网站| 国产精品丝袜视频| 中文字幕日韩专区| 51精品国产黑色丝袜高跟鞋| 日韩av在线资源| 91国产在线精品| 亚洲国产成人精品女人久久久| 精品无人区太爽高潮在线播放| 92看片淫黄大片看国产片| 国产中文字幕亚洲| 亚州av一区二区| 国产欧美一区二区三区视频| 国产精品丝袜白浆摸在线| 狠狠色香婷婷久久亚洲精品| 精品欧美激情精品一区| 欧美在线免费看| 97欧美精品一区二区三区| 国内精品400部情侣激情| 亚洲福利视频在线| 日韩高清电影好看的电视剧电影| 国产精品第一视频| www.日韩系列| 久久久91精品国产| 91精品视频在线免费观看| 成人av.网址在线网站| 色狠狠av一区二区三区香蕉蜜桃| 97免费中文视频在线观看| 久久久久久久久久久91| 日韩欧美精品网站| 亚洲欧美国产制服动漫| 日韩久久午夜影院| 久久精品国产精品| 97激碰免费视频| 国产综合福利在线| 日本道色综合久久影院| 国产精品久久久久7777婷婷| 国产精品吹潮在线观看| 亚洲国产古装精品网站| 在线观看免费高清视频97| 欧美丰满老妇厨房牲生活| 欧美另类交人妖| 成人午夜在线影院| 久久久亚洲国产天美传媒修理工| 成人自拍性视频| 国产一区二区久久精品| 久久久久久久久久婷婷| 欧美韩日一区二区| 欧美视频中文在线看| 日韩高清av一区二区三区| 久久久久久69| 亚洲欧洲免费视频| 欧美多人爱爱视频网站| 亚洲精品动漫久久久久| 日韩在线视频导航| 亚洲网在线观看| 欧美国产日韩一区二区| 综合欧美国产视频二区| 国产成人久久久精品一区| 羞羞色国产精品| 欧美一级片在线播放| 国产精品激情自拍| 亚洲国产成人精品女人久久久| 俺去亚洲欧洲欧美日韩| 91精品国产高清久久久久久| 精品一区电影国产| 国产亚洲欧美视频| 久久国产精品网站| 97视频免费在线观看| 海角国产乱辈乱精品视频| 国产亚洲精品美女久久久| 成人字幕网zmw| 欧美亚洲国产另类| 日本精品中文字幕| 国产在线一区二区三区| 一区二区三区动漫| 国产欧美一区二区三区在线| 亚洲国产精品成人精品| 久久久国产91| 国产精品色视频| 亚洲成人999| 中文字幕亚洲无线码a| 久久av资源网站| 欧美成人精品不卡视频在线观看| 日韩免费看的电影电视剧大全| 日韩欧美高清在线视频| 欧美激情小视频| 中文字幕一区二区三区电影| 精品亚洲一区二区三区四区五区| 国产91精品不卡视频| 97视频网站入口| 日韩在线视频中文字幕| 国产美女精品视频免费观看| 黄色成人在线播放| 国产成人综合精品在线| 亚洲精品国产拍免费91在线| 欧美成人精品激情在线观看| 亚洲黄色av女优在线观看| 成人激情视频在线| 中文字幕日韩免费视频| 久久精品2019中文字幕| 亚洲精品www久久久久久广东| 亚洲精品动漫100p| 欧美精品18videos性欧| y97精品国产97久久久久久| 久久综合伊人77777尤物| 久久成人精品一区二区三区| 一区二区三区视频免费| 狠狠躁18三区二区一区| 国产精品三级网站| 色综合久久88| 欧美一区二区三区免费观看| 欧美电影在线观看完整版|