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

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

java日志系統-- slf4j + log4j

2019-11-14 08:45:25
字體:
來源:轉載
供稿:網友

java日志系統-- slf4j + log4j

  在學校學習過程中,或者自己剛開始編程時,我經常通過System.out來輸出各種結果。由于程序的規模很小,再者不是線上的應用,所以這種方法簡單、快捷有效。在學習Hadoop過程中,第一次接觸log4j,但是當時并沒有在意這些細節。  工作后,遇到問題或者調試時會通過日志來看程序的運行狀態,尤其是把error stack輸出后,能夠很快的定位問題,對于解決問題起到很大的作用?! ∵@篇文章,通過“為什么使用 SLF4J 而不是 Log4J 來做 Java 日志 ”這樣的問題來帶入,再通過slf4+log4j來實踐日志配置。其他的日志記錄庫,如java.util.logging、logback等,待有時間在進行學習和總結。

1. slf4j-api、slf4j-log4j12以及log4j之間的關系

    slf4j : Simple Logging Facade for Java,為java提供的簡單日志門面,更底層一點說就是接口。允許用戶以自己的洗好,在工程中通過slf4j接入不同的日志系統。更直觀一點,slf4j是個數據線,一端嵌入程序,另一端連接日志系統,從而實現將程序中的信息導入到日志系統并記錄。        由此可見,slf4j就是眾多接口的集合,不負責具體的日志實現,只在編譯時負責尋找合適的日志系統進行綁定。具體的接口全部都在slf4j-api中定義。    下圖比較清晰地描述他們之間的關系。

 (1) 應用層使用slf4j-api作為日志接入的接口;    (2) 編譯時,slf4j-api中public final class LoggerFactory類中 PRivate final static void bind()方法會尋找具體的日志實現類綁定,主要通過 StaticLoggerBinder.getSingleton() 語句調用。    (3) slf4j-log4j12 是連接slf4j-api 和log4j的中間適配器,它實現了slf4j-api中StaticLoggerBinder接口,從而使得在編譯時綁定的是slf4j-log4j12的getSingleton()方法。    (4) log4j是具體的日志系統,通過slf4j-log4j12初始化log4j,達到最終日志輸出。

2. 為什么使用 SLF4J 而不是 Log4J 來做 Java 日志

(1) 最為重要的原因

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

(2) 占位符 {}

    占位符功能與String.format()方法中的%s非常近似,因為他在運行時才提取所提供的真正的字符串,而且這個占位符一般不需要指定參數的類型(相當方便,不過如果需要輸出指定格式,還是需要自己拼接)。減少了字符串的拼接,進而減少String對象所需要的資源。

(3) isXXXEnabled()

    在使用log4j時,由于java沒有那么方便的文檔級別的預編譯方法,如下的代碼是不是很無聊?

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

    而使用slf4j,可以更簡潔的達到同樣的效果,提高代碼的可讀性。

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

下面的SLF4J日志方法的代碼,來自于slf4j-log4j12-1.6.1.jar包里的Log4j的適配器類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來做日志

(1) 引用

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

(2) log4j的配置

 log4j可以通過程序代碼配置,也可以通過配置文件配置,顯然配置文件的方式更加靈活。   log4j支持兩種配置文件格式,一種是xml格式的文件,一種是java properties(key=value)。配置文件需要放置在classpath路徑下,而且XML文件的優先級更高。    key/value形式的更有助于說明,這里使用properties文件作為例子介紹log4j的配置。    a. 配置根Logger:         
log4j.rootLogger = [ level ] , appenderName, appenderName, …        其中level是日志記錄的優先級,appenderName是定義的Appenders,可以指定多個輸出目的地。    b. 配置Appender:
log4j.appender.appenderName = fully.qualified.name.of.appender.classlog4j.appender.appenderName.option1 = value1…log4j.appender.appenderName.option = valueN        Appender常用屬性:        Threshold=WARN        - 指定日志級別        ImmediateFlush=true   - 默認true,立即輸出        Target=System.err    -  默認情況下是:System.out,指定輸出控制臺        File=mylog.txt              - 指定消息輸出到mylog.txt文件        Append=false              - 默認true,指定是否追加        MaxFileSize=100KB    - 后綴可以是KB, MB 或者是 GB,指定日志文件的大小,到達時,將會自動滾動,原來的內容放置到mylog.log.1文件中        MaxBackupIndex=2       - 指定滾動文件的最大值        DatePattern='.yyyy-ww'  - 每周滾動一次。            1)'.'yyyy-MM: 每月            2)'.'yyyy-ww: 每周             3)'.'yyyy-MM-dd: 每天            4)'.'yyyy-MM-dd-a: 每天兩次            5)'.'yyyy-MM-dd-HH: 每小時            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    當使用org.apache.log4j.PatternLayout來自定義信息格式時,可以使用 log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p -%m%n 來格式化信息     %c 輸出所屬類的全名,可寫為 %c{Num} ,Num類名輸出的范圍 如:"com.sun.aaa.classB", %C{2}將使日志輸出輸出范圍為:aaa.classB     %d 輸出日志時間其格式為 可指定格式 如 %d{HH:mm:ss}等     %l 輸出日志事件發生位置,包括類目名、發生線程,在代碼中的行數     %n 換行符     %m 輸出代碼指定信息,如info(“message”),輸出message     %p 輸出日志的優先級,即 FATAL ,ERROR 等     %r 輸出從啟動到顯示該條日志信息所耗費的時間(毫秒數)     %t 輸出產生該日志事件的線程名
[%-5p %d{yyyy-MM-dd HH:mm:ss.SSS}] [%t] %l [%m]%n是我們使用的日志格式。    對于xml的配置,通過引用和參考的形式給出,    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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品一区二区三区电影免费| 日韩亚洲精品电影| 精品国偷自产在线| 欧美wwwwww| 日韩高清不卡av| yellow中文字幕久久| 91av在线播放视频| 成人激情电影一区二区| 久久九九亚洲综合| 国产成人a亚洲精品| 91国偷自产一区二区三区的观看方式| 欧美疯狂xxxx大交乱88av| 91久久国产综合久久91精品网站| 狠狠色狠狠色综合日日小说| 日韩欧美亚洲国产一区| 青青久久av北条麻妃海外网| 亚洲综合成人婷婷小说| 性欧美视频videos6一9| 亚洲欧美日韩国产中文| 亚洲精品视频免费在线观看| 国内精品久久久久久久| 国产suv精品一区二区三区88区| 国产精品7m视频| 久久成人精品电影| 国产成人精品在线视频| 亚洲一区二区三区sesese| 亚洲欧美日韩国产中文专区| 亚洲成在人线av| 亚洲直播在线一区| 欧美在线观看一区二区三区| 亚洲欧美日韩国产中文| 亚洲a级在线播放观看| 57pao精品| 91精品国产综合久久久久久蜜臀| 亚洲视频在线播放| 欧美在线视频免费| 亚洲欧美精品在线| 国产成人免费av电影| 国产一区视频在线| 亚洲老板91色精品久久| 亚洲娇小xxxx欧美娇小| 97视频免费观看| 国产精品一二三视频| 日韩精品日韩在线观看| 欧美理论片在线观看| 日韩欧美在线视频免费观看| 亚洲自拍在线观看| 亚洲天堂av在线免费观看| 欧美最猛性xxxxx亚洲精品| 国产精品视频一区国模私拍| 欧美精品一区二区三区国产精品| 日韩一区二区三区xxxx| 亚州精品天堂中文字幕| 欧美福利小视频| 国产一区二区三区在线免费观看| 亚洲性夜色噜噜噜7777| 性色av一区二区三区在线观看| 成人黄在线观看| 国产成人免费91av在线| 亚洲人高潮女人毛茸茸| 在线观看国产成人av片| 欧美一区二区三区艳史| 91精品国产自产在线老师啪| 色偷偷亚洲男人天堂| 亚洲视频电影图片偷拍一区| 亚洲黄页网在线观看| 国产精品一区二区电影| 91九色国产社区在线观看| 欧美高清视频在线播放| 国产精品电影网| 色噜噜狠狠狠综合曰曰曰88av| 国产欧美亚洲精品| 一区二区三区视频观看| 久久国产精品久久久久久久久久| 日韩av电影在线免费播放| 伊人久久五月天| 91极品女神在线| 色悠久久久久综合先锋影音下载| 欧美日韩一二三四五区| 久久综合久久88| 在线看片第一页欧美| 欧美麻豆久久久久久中文| 欧美激情日韩图片| 北条麻妃99精品青青久久| 久久亚洲精品视频| 国产免费一区视频观看免费| 欧美一区二三区| 日韩视频免费看| 亚洲精品资源美女情侣酒店| 亚洲人成在线电影| 91成人天堂久久成人| 乱亲女秽乱长久久久| 情事1991在线| 欧美高清自拍一区| 亚洲白拍色综合图区| 在线电影中文日韩| 久久精品国产一区二区电影| 91午夜在线播放| 国产专区精品视频| 中文字幕欧美在线| 国产精品www色诱视频| 国产免费一区二区三区在线能观看| 日韩精品在线观| 91成人精品网站| 国产成人精品av在线| 欧美国产日韩精品| 欧美性猛交xxxx免费看| 亚洲精品美女视频| 国产一区二区精品丝袜| 欧美性生交xxxxx久久久| 日韩成人中文电影| 欧美床上激情在线观看| 国产亚洲a∨片在线观看| yw.139尤物在线精品视频| 久久九九精品99国产精品| 欧美黑人极品猛少妇色xxxxx| 日韩在线激情视频| 日韩av免费看网站| 国产精品久久久久av| 伊人久久久久久久久久| 亚洲精品99久久久久中文字幕| 亚洲免费电影一区| 大桥未久av一区二区三区| 欧美精品在线播放| 成人免费在线视频网址| 欧美野外猛男的大粗鳮| 日韩免费在线电影| 久久69精品久久久久久国产越南| 久久久久久有精品国产| 日韩成人性视频| 欧美一区三区三区高中清蜜桃| 亚洲国产97在线精品一区| 久久天天躁狠狠躁老女人| 精品国产自在精品国产浪潮| 亚洲欧美日韩区| 91色中文字幕| 国产97在线播放| 国产精品欧美日韩久久| 日本中文字幕久久看| 久久久免费高清电视剧观看| 欧美性开放视频| 国产精品视频999| 国产香蕉一区二区三区在线视频| 热久久这里只有| 亚洲精品网址在线观看| 欧洲午夜精品久久久| 黑人巨大精品欧美一区二区一视频| 国产小视频国产精品| 日韩中文在线视频| 欧美激情视频在线观看| 欧美精品在线第一页| 91久久国产综合久久91精品网站| 亚洲淫片在线视频| 亚洲人午夜色婷婷| 91精品视频在线免费观看| 欧美一区二区三区图| 久久久噜噜噜久久久| 欧美极品美女视频网站在线观看免费| 国产精品视频一区二区高潮| www.欧美精品| 亚洲欧美国产精品久久久久久久| 国产美女久久精品香蕉69| 国外成人在线播放| 九色精品免费永久在线|