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

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

使用slf4j和Log4j構建日志

2019-11-10 19:34:15
字體:
來源:轉載
供稿:網友

使用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
国产成人在线亚洲欧美| yellow中文字幕久久| 久久久精品2019中文字幕神马| 日韩在线观看免费高清完整版| 国产成人一区二区三区电影| 色偷偷91综合久久噜噜| 成人激情电影一区二区| 国语自产偷拍精品视频偷| 久久久久成人精品| 久久视频精品在线| 久久久久久91| 久久久av电影| 97久久伊人激情网| 国产精品国产三级国产专播精品人| 精品av在线播放| 亚洲女人初尝黑人巨大| 亚洲美女中文字幕| 欧美成人激情在线| 国产精品老女人精品视频| 亚洲无限av看| 激情久久av一区av二区av三区| 狠狠做深爱婷婷久久综合一区| 日韩一区二区三区国产| 中文字幕精品av| 欧美一级大片视频| 久久久久久一区二区三区| 日韩欧美国产骚| 韩国国内大量揄拍精品视频| 午夜精品久久久久久久99热浪潮| 精品欧美aⅴ在线网站| 欧美日韩激情小视频| 亚洲人在线观看| 亚洲第一综合天堂另类专| 一二美女精品欧洲| 精品色蜜蜜精品视频在线观看| 91精品视频免费观看| 热久久这里只有| 欧美巨大黑人极品精男| 亚洲xxxx在线| 亚洲成人激情图| 精品久久久久久中文字幕| 成人国产精品av| 亚洲自拍偷拍色图| 日韩国产精品一区| 久久久久久亚洲精品中文字幕| 精品动漫一区二区| 亚洲欧美日韩天堂| 欧美资源在线观看| 国产精品你懂得| 国产精品久久久久久网站| 日韩黄在线观看| 日韩精品中文字幕久久臀| 亚洲欧美中文日韩在线| 中文字幕日韩精品在线| 国产精品欧美日韩| 黑丝美女久久久| 91精品视频免费| 韩日欧美一区二区| 国产精品综合网站| 精品欧美激情精品一区| 成人精品一区二区三区电影免费| 亚洲精品女av网站| 久久天天躁狠狠躁夜夜爽蜜月| 国产网站欧美日韩免费精品在线观看| www欧美日韩| 热久久免费视频精品| 色青青草原桃花久久综合| 成人免费看吃奶视频网站| 亚洲欧美综合精品久久成人| 正在播放国产一区| 国产偷亚洲偷欧美偷精品| 日韩视频免费大全中文字幕| 国产精品久久久久久久久久三级| 亚洲成人在线视频播放| 日韩乱码在线视频| 黑人精品xxx一区一二区| 久久久久在线观看| 久久伊人91精品综合网站| 国产91ⅴ在线精品免费观看| 欧美成人在线网站| 97在线日本国产| 九九热精品视频国产| 国产精品自产拍在线观看| 日韩精品福利在线| 亚洲国产欧美一区二区三区久久| 精品国产老师黑色丝袜高跟鞋| 在线播放日韩av| 第一福利永久视频精品| 国产va免费精品高清在线| 狠狠操狠狠色综合网| 国产亚洲精品激情久久| 2019日本中文字幕| 91精品国产自产91精品| 国产午夜精品全部视频在线播放| 在线观看亚洲区| 18久久久久久| 91tv亚洲精品香蕉国产一区7ujn| 国产精品视频免费在线观看| 欧美成人精品在线观看| 自拍偷拍亚洲精品| 亚洲综合av影视| 亚洲视频专区在线| 欧美一区二区三区图| 亚洲一区二区三区在线免费观看| 亚洲国产成人91精品| 亚洲成人a**站| 亚洲影影院av| 欧美日韩高清在线观看| 久久久精品2019中文字幕神马| 欧美极度另类性三渗透| 国产成人a亚洲精品| 91精品91久久久久久| 亚洲免费av电影| 97精品伊人久久久大香线蕉| 欧美另类暴力丝袜| 欧美日韩国产91| 亚洲三级av在线| 国产精品爽爽爽| 久久91超碰青草是什么| 日韩免费精品视频| 亚洲欧美国产va在线影院| 久久久久女教师免费一区| www.亚洲一二| 亚洲一区二区国产| 亚洲在线观看视频网站| 亚洲国产精久久久久久| 成人久久久久爱| 97香蕉久久超级碰碰高清版| 国产专区精品视频| 久久99精品久久久久久青青91| 欧美中文字幕第一页| 97香蕉超级碰碰久久免费软件| 亚洲国产精品女人久久久| 91成人性视频| 5278欧美一区二区三区| 精品久久久久国产| 韩国国内大量揄拍精品视频| 久久这里有精品| 国产日韩精品电影| 国产精品色午夜在线观看| 成人午夜激情网| 中文字幕视频一区二区在线有码| 国产精品日本精品| 亚洲欧洲中文天堂| 亚洲免费视频一区二区| 国产黑人绿帽在线第一区| 欧美国产日本高清在线| 久久精品视频在线| 综合欧美国产视频二区| 福利微拍一区二区| 日日骚久久av| 久久精品国产清自在天天线| 在线视频一区二区| 不卡在线观看电视剧完整版| 成人精品一区二区三区电影免费| 国产va免费精品高清在线| 精品国产91乱高清在线观看| 国产亚洲成av人片在线观看桃| 精品国产美女在线| 国产男女猛烈无遮挡91| 国产精品日韩久久久久| 国产精品精品视频一区二区三区| 亚洲天堂男人的天堂| 欧美在线观看一区二区三区|