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

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

使用slf4j和Log4j構建日志

2019-11-10 16:46:43
字體:
來源:轉載
供稿:網友

使用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
国产精品三级美女白浆呻吟| 日本不卡高字幕在线2019| 亚洲福利影片在线| 国产精品永久免费| 亚洲欧美综合v| 国产黑人绿帽在线第一区| 亚洲免费伊人电影在线观看av| 国产精品吹潮在线观看| 亚洲的天堂在线中文字幕| 国产精品一区二区在线| 国产精品成人品| 一个人www欧美| 色诱女教师一区二区三区| 色妞久久福利网| 亚洲国产日韩欧美在线图片| 亚洲国产精品电影在线观看| 成人网欧美在线视频| 成人信息集中地欧美| 97视频免费在线观看| 日日狠狠久久偷偷四色综合免费| 久久香蕉频线观| 亚洲成人性视频| 狠狠色狠色综合曰曰| 精品国产91乱高清在线观看| 黑人精品xxx一区一二区| 欧美中文字幕在线视频| 亚洲第一av网站| 国产精品久久久久久久久借妻| 亚洲激情中文字幕| 欧美激情欧美激情| 爽爽爽爽爽爽爽成人免费观看| 久久夜色撩人精品| 欧美大片在线影院| 国产欧美在线视频| 最近免费中文字幕视频2019| 国产精品一区二区三区毛片淫片| 91在线免费视频| 国产欧美一区二区三区在线看| 92版电视剧仙鹤神针在线观看| 精品国产福利视频| 国产伦精品一区二区三区精品视频| 精品亚洲一区二区三区四区五区| 欧美一区二区三区……| 久久精品国产久精国产一老狼| 欧美激情一区二区三区久久久| 久久精品久久久久久| 国模精品系列视频| 人人做人人澡人人爽欧美| 日本不卡视频在线播放| 欧美专区日韩视频| 欧美一区二区三区四区在线| 中文字幕亚洲一区二区三区五十路| 欧美裸体男粗大视频在线观看| 欧美精品午夜视频| 色妞在线综合亚洲欧美| 亚洲自拍偷拍第一页| 人体精品一二三区| 中文字幕欧美日韩在线| 久久久久久久久久久av| 中文字幕v亚洲ⅴv天堂| 久久高清视频免费| 午夜精品蜜臀一区二区三区免费| 久久久久成人网| 日韩精品视频在线免费观看| 热久久这里只有精品| 在线成人免费网站| 久久精品人人做人人爽| 日韩免费观看在线观看| 亚洲视频自拍偷拍| 日韩一级黄色av| 久久精品福利视频| 国产69精品99久久久久久宅男| 国产成人综合亚洲| 亚洲美女www午夜| 在线午夜精品自拍| 亚洲视频在线观看网站| 国产成人久久久| 国语自产在线不卡| 亚洲天堂av在线播放| 亚洲精品99久久久久| 国产一区二区三区在线播放免费观看| 欧美性xxxx极品hd欧美风情| 亚洲男人7777| 综合激情国产一区| 亚洲国产精品久久久| 日本精品久久久| 秋霞成人午夜鲁丝一区二区三区| 国模精品一区二区三区色天香| 丁香五六月婷婷久久激情| 激情懂色av一区av二区av| 日韩精品一二三四区| 欧美区二区三区| 亚洲欧美另类中文字幕| 色系列之999| 久久久久久久久久久亚洲| 国产精品露脸自拍| 日本韩国在线不卡| 日韩高清免费在线| 久久99久久99精品免观看粉嫩| 日本成人在线视频网址| 欧美www视频在线观看| 日韩三级成人av网| 亚洲国产精品成人一区二区| 91亚洲国产成人久久精品网站| 欧美成人黄色小视频| 欧美与欧洲交xxxx免费观看| 亚洲美女av网站| 色先锋久久影院av| 亚洲精品国产品国语在线| 亚洲国产成人久久| 欧美大片免费观看| 欧美日韩亚洲网| 亚洲国产精品高清久久久| 日韩成人av在线| 高清视频欧美一级| 欧美在线中文字幕| 亚洲欧洲日本专区| 91sa在线看| 国产香蕉97碰碰久久人人| 国产精品极品美女在线观看免费| 欧美xxxx综合视频| 欧美日韩国产一区二区| 国产精品久久91| 4p变态网欧美系列| 亚洲最新视频在线| 成人免费在线视频网站| 久久天天躁狠狠躁夜夜躁2014| 欧美成人午夜剧场免费观看| 久久韩国免费视频| 日韩成人在线播放| 日韩在线免费视频观看| 色999日韩欧美国产| 日韩第一页在线| 国产99久久久欧美黑人| 亚洲成人国产精品| 亚洲mm色国产网站| 欧美丝袜第一区| 国产欧美精品一区二区| 人人爽久久涩噜噜噜网站| 久久精品视频在线观看| 久久精品99国产精品酒店日本| 福利精品视频在线| 亚洲国产精品人久久电影| 欧美午夜片在线免费观看| 欧美成人免费小视频| 亚洲欧洲成视频免费观看| 精品久久香蕉国产线看观看gif| 色噜噜狠狠狠综合曰曰曰88av| 亚洲天堂色网站| 亚洲人成电影在线观看天堂色| 欧美激情乱人伦一区| 国产精品一区二区三区在线播放| 国产成人精品在线视频| 亚洲美女av网站| 欧美日韩国产丝袜另类| 中文字幕亚洲色图| 欧美老女人xx| 国产一区玩具在线观看| 精品日本美女福利在线观看| 欧美性精品220| 欧美性猛交xxxx黑人猛交| 最近2019中文字幕在线高清| 国产成人精彩在线视频九色| 欧美中文字幕在线|