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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

java日志系統(tǒng)-- slf4j + log4j

2019-11-14 08:45:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java日志系統(tǒng)-- slf4j + log4j

  在學(xué)校學(xué)習(xí)過(guò)程中,或者自己剛開(kāi)始編程時(shí),我經(jīng)常通過(guò)System.out來(lái)輸出各種結(jié)果。由于程序的規(guī)模很小,再者不是線(xiàn)上的應(yīng)用,所以這種方法簡(jiǎn)單、快捷有效。在學(xué)習(xí)Hadoop過(guò)程中,第一次接觸log4j,但是當(dāng)時(shí)并沒(méi)有在意這些細(xì)節(jié)?! 」ぷ骱?,遇到問(wèn)題或者調(diào)試時(shí)會(huì)通過(guò)日志來(lái)看程序的運(yùn)行狀態(tài),尤其是把error stack輸出后,能夠很快的定位問(wèn)題,對(duì)于解決問(wèn)題起到很大的作用。  這篇文章,通過(guò)“為什么使用 SLF4J 而不是 Log4J 來(lái)做 Java 日志 ”這樣的問(wèn)題來(lái)帶入,再通過(guò)slf4+log4j來(lái)實(shí)踐日志配置。其他的日志記錄庫(kù),如java.util.logging、logback等,待有時(shí)間在進(jìn)行學(xué)習(xí)和總結(jié)。

1. slf4j-api、slf4j-log4j12以及l(fā)og4j之間的關(guān)系

    slf4j : Simple Logging Facade for Java,為java提供的簡(jiǎn)單日志門(mén)面,更底層一點(diǎn)說(shuō)就是接口。允許用戶(hù)以自己的洗好,在工程中通過(guò)slf4j接入不同的日志系統(tǒng)。更直觀一點(diǎn),slf4j是個(gè)數(shù)據(jù)線(xiàn),一端嵌入程序,另一端連接日志系統(tǒng),從而實(shí)現(xiàn)將程序中的信息導(dǎo)入到日志系統(tǒng)并記錄。        由此可見(jiàn),slf4j就是眾多接口的集合,不負(fù)責(zé)具體的日志實(shí)現(xiàn),只在編譯時(shí)負(fù)責(zé)尋找合適的日志系統(tǒng)進(jìn)行綁定。具體的接口全部都在slf4j-api中定義。    下圖比較清晰地描述他們之間的關(guān)系。

 (1) 應(yīng)用層使用slf4j-api作為日志接入的接口;    (2) 編譯時(shí),slf4j-api中public final class LoggerFactory類(lèi)中 PRivate final static void bind()方法會(huì)尋找具體的日志實(shí)現(xiàn)類(lèi)綁定,主要通過(guò) StaticLoggerBinder.getSingleton() 語(yǔ)句調(diào)用。    (3) slf4j-log4j12 是連接slf4j-api 和log4j的中間適配器,它實(shí)現(xiàn)了slf4j-api中StaticLoggerBinder接口,從而使得在編譯時(shí)綁定的是slf4j-log4j12的getSingleton()方法。    (4) log4j是具體的日志系統(tǒng),通過(guò)slf4j-log4j12初始化log4j,達(dá)到最終日志輸出。

2. 為什么使用 SLF4J 而不是 Log4J 來(lái)做 Java 日志

(1) 最為重要的原因

    由第一個(gè)問(wèn)題,我們可以知道slf4j就是各種接口的集合,對(duì)外暴露相同的接口,用戶(hù)可以使用自己指定的日志系統(tǒng)。一句話(huà)總結(jié),slf4j讓你的代碼獨(dú)立于任何特定的日志系統(tǒng)API。    這樣的特性,尤其適合于公共的庫(kù)的開(kāi)發(fā)。例如,你的工程使用log4j,需要包含一個(gè)common-utils的庫(kù),而這個(gè)庫(kù)還依賴(lài)logback日志記錄庫(kù),那么你的工程還需要包含他們。然而,如果common-utils庫(kù)使用slf4j,那么你可以繼續(xù)使用你的日志記錄庫(kù),而不需要痛哭地添加和維護(hù)另一個(gè)新的日志記錄框架。

(2) 占位符 {}

    占位符功能與String.format()方法中的%s非常近似,因?yàn)樗谶\(yùn)行時(shí)才提取所提供的真正的字符串,而且這個(gè)占位符一般不需要指定參數(shù)的類(lèi)型(相當(dāng)方便,不過(guò)如果需要輸出指定格式,還是需要自己拼接)。減少了字符串的拼接,進(jìn)而減少String對(duì)象所需要的資源。

(3) isXXXEnabled()

    在使用log4j時(shí),由于java沒(méi)有那么方便的文檔級(jí)別的預(yù)編譯方法,如下的代碼是不是很無(wú)聊?

if (logger.isDebugEnabled()) {    logger.debug("Processing trade with id: " + id + " symbol: " + symbol);}

    而使用slf4j,可以更簡(jiǎn)潔的達(dá)到同樣的效果,提高代碼的可讀性。

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

下面的SLF4J日志方法的代碼,來(lái)自于slf4j-log4j12-1.6.1.jar包里的Log4j的適配器類(lèi)Log4jLoggerAdapter.

public void debug(String format, Object arg1, Object arg2) { if (logger.isDebugEnabled()) {      FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);      logger.log(FQCN, Level.DEBUG, ft.getMessage(), ft.getThrowable());    }}

3. slf4j + log4j來(lái)做日志

(1) 引用

    通過(guò)上面的介紹,除了引用slf4j之外,還需要作為適配器的slf4j-log4j12和具體實(shí)現(xiàn)的log4j的jar包。具體版本需要看使用的log4j版本和slf4j版本。    如果通過(guò)Maven來(lái)管理項(xiàng)目依賴(lài),那就簡(jiǎn)單多了,只需要在pom文件中引用slf4j-log4j12的后,編譯時(shí)會(huì)自動(dòng)引入它所依賴(lài)的其他jar包。
    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.6.1</version>    </dependency> 

(2) log4j的配置

 log4j可以通過(guò)程序代碼配置,也可以通過(guò)配置文件配置,顯然配置文件的方式更加靈活。   log4j支持兩種配置文件格式,一種是xml格式的文件,一種是java properties(key=value)。配置文件需要放置在classpath路徑下,而且XML文件的優(yōu)先級(jí)更高。    key/value形式的更有助于說(shuō)明,這里使用properties文件作為例子介紹log4j的配置。    a. 配置根Logger:         
log4j.rootLogger = [ level ] , appenderName, appenderName, …        其中l(wèi)evel是日志記錄的優(yōu)先級(jí),appenderName是定義的Appenders,可以指定多個(gè)輸出目的地。    b. 配置Appender:
log4j.appender.appenderName = fully.qualified.name.of.appender.classlog4j.appender.appenderName.option1 = value1…log4j.appender.appenderName.option = valueN        Appender常用屬性:        Threshold=WARN        - 指定日志級(jí)別        ImmediateFlush=true   - 默認(rèn)true,立即輸出        Target=System.err    -  默認(rèn)情況下是:System.out,指定輸出控制臺(tái)        File=mylog.txt              - 指定消息輸出到mylog.txt文件        Append=false              - 默認(rèn)true,指定是否追加        MaxFileSize=100KB    - 后綴可以是KB, MB 或者是 GB,指定日志文件的大小,到達(dá)時(shí),將會(huì)自動(dòng)滾動(dòng),原來(lái)的內(nèi)容放置到mylog.log.1文件中        MaxBackupIndex=2       - 指定滾動(dòng)文件的最大值        DatePattern='.yyyy-ww'  - 每周滾動(dòng)一次。            1)'.'yyyy-MM: 每月            2)'.'yyyy-ww: 每周             3)'.'yyyy-MM-dd: 每天            4)'.'yyyy-MM-dd-a: 每天兩次            5)'.'yyyy-MM-dd-HH: 每小時(shí)            6)'.'yyyy-MM-dd-HH-mm: 每分鐘            c. 配置Layout:    Layout是和Appender綁定的,不同的Appender可以有不同的輸出格式     
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.classlog4j.appender.appenderName.layout.option1 = value1…log4j.appender.appenderName.layout.option = valueN    當(dāng)使用org.apache.log4j.PatternLayout來(lái)自定義信息格式時(shí),可以使用 log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 來(lái)格式化信息     %c 輸出所屬類(lèi)的全名,可寫(xiě)為 %c{Num} ,Num類(lèi)名輸出的范圍 如:"com.sun.aaa.classB", %C{2}將使日志輸出輸出范圍為:aaa.classB     %d 輸出日志時(shí)間其格式為 可指定格式 如 %d{HH:mm:ss}等     %l 輸出日志事件發(fā)生位置,包括類(lèi)目名、發(fā)生線(xiàn)程,在代碼中的行數(shù)     %n 換行符     %m 輸出代碼指定信息,如info(“message”),輸出message     %p 輸出日志的優(yōu)先級(jí),即 FATAL ,ERROR 等     %r 輸出從啟動(dòng)到顯示該條日志信息所耗費(fèi)的時(shí)間(毫秒數(shù))     %t 輸出產(chǎn)生該日志事件的線(xiàn)程名
[%-5p %d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %l [%m]%n是我們使用的日志格式。    對(duì)于xml的配置,通過(guò)引用和參考的形式給出,    http://www.49028c.com/kevin-yuan/archive/2012/11/23/2784610.html    https://www.mkyong.com/logging/log4j-xml-example/引用和參考http://woshixy.blog.51cto.com/5637578/1371420https://www.oschina.net/translate/why-use-sl4j-over-log4j-for-logginghttp://blog.csdn.net/yycdaizi/article/details/8276265//配置https://my.oschina.net/exit/blog/182445https://www.mkyong.com/logging/log4j-xml-example/http://www.49028c.com/ITEagle/archive/2010/04/23/1718365.html


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲一区二区91| 波多野结衣在线一区| 午夜欧美在线一二页| 日本午夜在线| 国产精品激情偷乱一区二区∴| 强伦女教师2:伦理在线观看| 性插视频在线观看| 美日韩一区二区三区| 欧美国产在线观看| 一个人在线视频免费观看www| 天堂8在线天堂资源bt| 久久的色偷偷| 宅男噜噜噜66国产精品免费| 最近2019中文字幕在线高清| 欧美一级二级视频| 日本电影久久久| 新婚的少妇hd中文字幕| 麻豆成人91精品二区三区| 国产女人18毛片水18精| 国产小视频免费在线观看| 欧美三级一区二区三区| 91网站在线看| 日韩精品视频免费看| 韩剧1988在线观看免费完整版| 蝌蚪视频在线播放| 国产精品久久久久91| 四虎精品一区二区| 国产精品777777| 污视频网址在线观看| 91九色综合| 国产精品免费一区二区三区都可以| 二区视频在线观看| 先锋影音av资源站| 瑟瑟在线观看| 婷婷成人激情在线网| 日韩精品免费视频人成| 看成年女人免费午夜视频| www.五月天色| 毛片女人与拘交视频| 视频免费裸体网站| 亚洲av色香蕉一区二区三区| 精品孕妇一区二区三区| 国产jizz| 日韩欧美中文字幕一区二区三区| 午夜精品福利视频网站| 国产一国产二国产三| 国产亲近乱来精品视频| 国内成人精品2018免费看| 中文字幕一区在线| 日韩激情精品| 国产不卡一区二区三区在线观看| 国产主播在线一区| 日韩免费电影网站| 色婷婷综合久久久久中文| 国模私拍视频在线播放| 亚洲精品666| 日韩欧美在线观看| 一级日本免费的| 亚洲国产成人精品一区二区三区| 激情影院在线观看| ady日本映画久久精品一区二区| 亚洲大胆人体在线| 91传媒在线免费观看| 天天综合网天天做天天受| 国产.精品.日韩.另类.中文.在线.播放| 欧美套图亚洲一区| 欧美区一区二区| 亚洲男女一区二区三区| 永久域名在线精品| 尤物视频..com| 久久久一区二区三区四区| 人成免费在线视频| 亚洲热在线观看| 国产污在线观看| 午夜精品久久久久久99热| 7777免费精品视频| 亚洲视频免费在线| 精品国产网站在线观看| √天堂资源在线| 精品毛片在线观看| 亚洲一区二区三区黄色| 中文字幕一区免费在线观看| 欧美家庭影院| 国产不卡一区| 日韩精品一区在线| 亚洲国产日韩一区无码精品久久久| 欧美高清视频一区二区| 国产成人精品三级麻豆| 日本免费一区二区三区视频| 日韩超碰人人爽人人做人人添| 国产极品美女高潮无套久久久| 丰满人妻一区二区三区无码av| 成人久久一区二区三区| 无码免费一区二区三区| 日本最黄一级片免费在线| 中文字幕精品在线| 亚洲成人黄色网| 竹内纱里奈兽皇系列在线观看| 精品国产乱码久久久久久久软件| 污视频网站在线免费| 成年人黄视频在线观看| 99re6这里只有精品| 5月婷婷6月丁香| 天天影视色香欲综合| 亚洲欧洲在线视频| 久久久久久麻豆| 91国偷自产一区二区三区的观看方式| 欧美一级日韩免费不卡| 亚欧在线观看视频| 青青草原成人网| 久久国产激情视频| 午夜性福利视频| 欧美人善交videosg| av不卡在线免费观看| 在线精品一区二区三区| 亚洲精品乱码久久久久久蜜桃图片| 亚洲最新av网址| 日本色综合中文字幕| 久久99这里只有精品| 午夜天堂在线观看| 精品视频久久久久久| 人人干人人爱人人爱| 大桥未久一区二区三区| 少妇高潮一区二区三区99| 国产精品jizz在线观看美国| 久久久久久久免费视频了| 很黄的网站在线观看| 欧美性猛交xxxx黑人猛交| 极品白浆推特女神在线观看| 久久这里只有精品18| 欧美巨胸大乳hitomi| 国产a级黄色片| 亚洲国产精品va在线看黑人动漫| 欧美性猛交 xxxx| 色综合咪咪久久网| 性一爱一乱一交一视频| av在线不卡播放| 91麻豆.com| 天天看天天操| 麻豆一区在线观看| 78精品国产综合久久香蕉| 香蕉久久一区二区三区| 国产在线精品二区| 亚洲一区精品在线观看| 国模精品一区二区三区| 色播亚洲婷婷| 跑男十一季在线观看免费| www日本在线观看| 天天干免费视频| 97超碰在线免费观看| 国产成人精品一区二区三区| 999在线观看精品免费不卡网站| 一区二区电影网| 亚洲专区视频| 国产稀缺真实呦乱在线| 中文字幕人妻熟女人妻洋洋| 日韩欧美一区二区三区四区五区| 欧美专区一区| av网站有哪些| 久久久久国产精品熟女影院| 亚洲天堂免费在线观看视频| 国产精品免费成人| 亚洲天堂一二三| 日本亚洲精品| 永久亚洲成a人片777777| 亚洲精品亚洲人成人网在线播放| 久久中文字幕一区二区三区| 18+视频在线观看| xfplay先锋影音夜色资源站| 美女在线一区| 国产精品久久久久久久久搜平片| 久久国产精品免费精品3p| 手机福利视频欧美| 视频欧美一区| 成人在线黄色| 日本人妻熟妇久久久久久| 国产亚洲欧美精品久久久www| 中文字幕av一区二区三区四区| 亚洲成人免费视| 韩国一区二区电影| 国产午夜精品久久久久| 在线碰免费视频在线观看| 6080亚洲精品一区二区| 日本在线高清视频一区| 在线欧美不卡| 欧洲一区二区在线| 日韩一区二区免费在线电影| www.亚洲| 品久久久久久久久久96高清| 福利片在线一区二区| 亚洲电影免费观看| 亚洲av永久纯肉无码精品动漫| 欧美白人做受xxxx视频| 自拍偷拍一区二区三区| 欧美午夜片欧美片在线观看| 午夜精品久久久久久久99热| 国产免费拔擦拔擦8x高清在线人| 日本一区二区三区免费视频| 久久人91精品久久久久久不卡| 毛片手机在线观看| 喜爱夜蒲2在线| 久草福利视频在线| 欧美成人精品一区二区男人小说| 新版中文在线官网| 亚洲自偷自拍熟女另类| 久久一留热品黄| 92看片淫黄大片欧美看国产片| 免费在线观看a视频| 中文字幕乱码一区二区三区| 亚洲3p在线观看| 不卡的av电影| 国产成人高清激情视频在线观看| 大尺度在线观看| 国产精品久久久久久久岛一牛影视| 欧美色欧美色| 欧美xxxx黑人又粗又长密月| 男人网站在线观看| 国产福利视频在线| 成视频在线免费观看| 久久久午夜精品理论片中文字幕| 国产成人无码av在线播放dvd| 日韩精品中午字幕| 欧美gay视频| 少妇一级淫片免费放中国| 一区二区三区美女xx视频| www.com操| 成人av黄色| 国产精品毛片无遮挡高清| 26uuu国产电影一区二区| 91免费网站视频| 精品第一国产综合精品aⅴ| 国产精品久久999| 亚洲v在线观看| 久久99久久久| 亚洲欧洲一区二区| 亚洲欧美韩国综合色| 美女啪啪无遮挡免费久久网站| 女女调教被c哭捆绑喷水百合| 韩国av免费在线| 久久亚洲AV成人无码国产野外| 久久亚洲天堂网| 国产1区2区3区4区| 国产精品一区二区久激情瑜伽| 日韩pacopacomama| 18深夜在线观看免费视频| 色涩视频在线观看| 第一sis亚洲原创| 永久免费成人代码| 在线这里只有精品| 久久综合五月天| 精品视频一区二区三区在线观看| 亚洲精华国产欧美| 四虎永久在线精品免费一区二区| 午夜视频在线免费观看| ed2k情侣啪啪91av| 禁断一区二区三区在线| 国产精品每日更新在线播放网址| 国产精品国产自产拍在线| 在线免费视频你懂得| 亚洲精品少妇久久久久久| 男女激情免费视频| 日本午夜精品理论片a级app发布| 婷婷久久国产对白刺激五月99| 天天干中文字幕| 99麻豆久久久国产精品免费优播| 欧美唯美清纯偷拍| 国产精品一区二区三区四区| 欧美一区二区播放| 免费一级黄色大片| 中文字幕第17页| 六十路在线观看| 91在线高清观看| 国产精品99久久久久久动医院| 日韩欧美亚洲另类| 亚州欧美日韩中文视频| 俺要去色综合狠狠| 日本www在线观看视频| 91美女精品福利| 国产成人精品免费看| 日本中文字幕一区二区有码在线| 久久bbxx| 乱中年女人伦av一区二区| 2019天天干夜夜操| 二区三区四区高清视频在线观看| 国产在线观看精品一区| 怡红院男人天堂| 亚洲国产果冻传媒av在线观看| 国产日产欧美精品| 国产视频第一页| 91精品国产91综合久久蜜臀| 最近2019年日本中文免费字幕| 宅男午夜视频| 色综合久久99| 91在线观看下载| 91手机视频在线观看| 亚洲av无码乱码国产精品| 国产精品一区二区免费| 中文无码av一区二区三区| 秋霞视频一区二区| 国产精品成人观看视频国产奇米| 日韩黄色av| 亚洲精品国产系列| 日本人69视频| 日本视频精品一区| 国产精品福利一区二区三区| 国产精品美女| 中文精品一区二区| 日韩三级视频在线播放| 色哟哟免费在线观看| 欧美综合亚洲图片综合区| 亚洲福利视频久久| 久久爱www久久做| 亚洲a级在线播放观看| 老司机在线精品视频| 国产精品久久久久久人| 亚洲午夜精品一区二区国产| 久久精品国产99| 91香蕉视频在线观看视频| 中文天堂资源在线| 亚洲精品国产久| 久久久久黄久久免费漫画| av中文在线资源| 欧美精品乱码久久久久久按摩| 精品一区二区精品| 午夜影视日本亚洲欧洲精品| 天天躁夜夜躁狠狠是什么心态| 国产在线中文字幕| 天堂精品在线视频|