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

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

使用slf4j和Log4j構建日志

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

使用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
91爱视频在线| 精品动漫一区二区| 欧美日韩xxx| 国产在线久久久| 欧美成人免费一级人片100| 在线观看欧美视频| 久久精品国产一区二区三区| 狠狠做深爱婷婷久久综合一区| 国产午夜精品理论片a级探花| 亚洲精品国精品久久99热一| 欧美午夜精品久久久久久人妖| 日韩在线视频播放| 最新国产成人av网站网址麻豆| 国产91精品黑色丝袜高跟鞋| 久久综合久久八八| 欧美日韩第一视频| 成人性教育视频在线观看| 国产精品人成电影在线观看| zzijzzij亚洲日本成熟少妇| 亚洲国产高潮在线观看| 亚洲国产另类久久精品| 亚洲大胆人体视频| 亚洲精品国产精品国产自| 国产精品扒开腿做爽爽爽视频| 久久免费少妇高潮久久精品99| 久久艹在线视频| 久久69精品久久久久久久电影好| 91av免费观看91av精品在线| 欧美日韩第一视频| 日韩视频中文字幕| 国内外成人免费激情在线视频网站| 91禁外国网站| 久久久91精品国产一区不卡| 久久欧美在线电影| 久久国产精品久久久| 少妇高潮久久久久久潘金莲| 久久五月天色综合| 久久色免费在线视频| 欧美日在线观看| 中文字幕一区电影| 国产精品美女在线观看| 在线日韩第一页| 欧美性20hd另类| 欧美日韩国产一区二区三区| 日韩美女写真福利在线观看| 日韩电影中文 亚洲精品乱码| 成人免费视频在线观看超级碰| 国产精品av在线播放| 自拍偷拍亚洲一区| 欧日韩不卡在线视频| 亚洲欧美日韩一区二区三区在线| 精品国产乱码久久久久久虫虫漫画| 色婷婷综合久久久久中文字幕1| 国产亚洲精品久久久久动| 欧美精品18videos性欧| 亚洲一区中文字幕| 国产精品久久国产精品99gif| 日韩精品免费看| 美女av一区二区| 欧美性xxxx在线播放| 黄色一区二区在线观看| 欧美激情xxxx| 全色精品综合影院| 久久久久久有精品国产| 精品一区二区三区四区| 久久天天躁狠狠躁夜夜av| 欧美亚洲午夜视频在线观看| xvideos国产精品| 久久久久久免费精品| 综合网中文字幕| 久久久久久久久久av| 国产日韩欧美成人| 久久久女人电视剧免费播放下载| 国产精品一区二区久久久| 亚洲韩国日本中文字幕| 久久久女人电视剧免费播放下载| 欧美精品免费在线观看| 国产一区二区三区日韩欧美| 精品色蜜蜜精品视频在线观看| 国产精品欧美一区二区三区奶水| 亚洲天堂久久av| 欧美日韩另类字幕中文| 欧美日韩一区二区三区在线免费观看| 精品夜色国产国偷在线| 亚洲欧美日韩直播| 国模精品一区二区三区色天香| 成人免费看黄网站| 国产成人一区二区三区小说| 国产精品pans私拍| 精品久久久久久久久国产字幕| 欧美日韩综合视频| 欧美亚洲另类在线| 成人性生交大片免费看视频直播| 亚洲国产成人精品久久久国产成人一区| 992tv在线成人免费观看| 欧美日韩亚洲视频一区| 亚州精品天堂中文字幕| 欧美性videos高清精品| 精品久久久久久国产| 久久精品国产亚洲7777| 成人激情视频在线观看| 日韩高清av在线| 色综合视频一区中文字幕| 在线亚洲欧美视频| 欧美午夜片在线免费观看| 国内自拍欧美激情| 欧美成人免费va影院高清| 精品视频中文字幕| 欧美麻豆久久久久久中文| 亚洲男人天堂网| 亚洲欧洲国产精品| 一区二区国产精品视频| 亚洲国产欧美久久| 久久成人精品一区二区三区| 午夜精品国产精品大乳美女| 姬川优奈aav一区二区| 黑人狂躁日本妞一区二区三区| 亚洲www视频| 久久深夜福利免费观看| 91国偷自产一区二区三区的观看方式| 久久91精品国产91久久跳| 日韩精品亚洲元码| 亚洲激情在线观看视频免费| 欧美性在线视频| 日韩欧美在线视频免费观看| 国产精品久久久久久久9999| 欧美成人性生活| 国产一区二区三区视频| 在线播放日韩欧美| 国产精品激情av在线播放| 国产精品自拍偷拍| 欧洲精品久久久| 91亚洲精品一区二区| 91精品视频在线免费观看| 91久久久久久久久久久久久| 国内精品久久久久伊人av| 日韩电影免费观看在线观看| 午夜精品www| 91av在线免费观看| 在线播放精品一区二区三区| 91精品国产乱码久久久久久久久| 国产成人福利网站| 国产成+人+综合+亚洲欧美丁香花| 国产噜噜噜噜久久久久久久久| 91精品在线播放| 精品高清一区二区三区| 国产精品99久久久久久久久久久久| 中文亚洲视频在线| 国产97在线|亚洲| 日韩精品视频中文在线观看| 国产美女扒开尿口久久久| 亚洲男人av电影| 久久影视三级福利片| 欧美日韩在线观看视频| 欧美激情女人20p| 国产精品999999| 成人久久一区二区三区| 亚洲qvod图片区电影| 黄色一区二区在线| 亚洲女人被黑人巨大进入al| 亚洲free性xxxx护士hd| 久久久视频精品| 久久久久久999| 亚洲电影免费观看高清完整版在线|