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

首頁 > 開發 > Java > 正文

Java中 log4j日志級別配置詳解

2024-07-13 10:16:06
字體:
來源:轉載
供稿:網友

1.1 前言

  說出來真是丟臉,最近被公司派到客戶公司面試外包開發崗位,本來準備了什么redis、rabbitMQ、SSM框架的相關面試題以及自己做過的一些項目回顧,信心滿滿地去面試,結果別人一上來就問到了最近項目使用的日志系統是什么?日志級別是怎么配置的?當時我都蒙X了,平時都是項目經理搭的,我自己也是隨便上網一搜往配置文件一黏貼就OK了。我就這么說完后面試官深深定了我一眼,當時我的內心羞愧到......

1.2 閑話少說,講講日志的發展故事(如果已經了解的可以跳過,直接看1.3日志配置)

  要想對日志技術實現深入了解,我個人建議去看:logback + slf4j。至于日志配置,還是了解java/276048.html">log4j比較好,因為目前絕大部分的項目還是使用log4j的。好了,下面開始講講日志的發展故事:

  1999年,Apache開源社區發布了log4j,一時轟動整個程序界,從此成為日志的標準并廣泛為java程序員所使用。隨后Sun公司也在JDK1.4版本時發布了Logging機制(java.util.logging,以下簡稱JUL),但是該機制并未獲得公眾的認可,真是可憐。不久Apache又推出了commons-logging日志框架(能夠讓開發者抽象日志實現方式而不必關注具體使用哪個日志技術,通俗地說就是你要用手機叫滴滴,如果你是在北京你就會叫來北京的滴滴,在香港你就會叫來香港的滴滴),該框架仿佛是對Sun公司的鄙睨,其可以自動查找調用當前環境下的日志技術進行日志輸出,該日志框架可支持log4j或JUL。commons-logging+log4j在其后的很長一段時間內成為了Java日志的經典組合。然而之后commons-logging有一段時間沒更新了,不知道是不是commons-logging當初的設計不夠好,想再優化也比較多困難,為什么這么說呢?因為接下來一個優秀的日志框架slf4j誕生了,該作者(Ceki Gülcü)就是log4j的作者之一,他的slf4j設計上更優雅,并且他還實現了logback技術,也是比log4j更前沿。至此,日志體系由commons-logging+log4j一家獨大的局面開始受到動搖,各種commons-logging+log4j?slf4j+log4j?slf4j+logback?搭配,真是讓人揪心。更恐怖的是,Ceki Gülcü大佬又幫忙優化了log4j,從此世界又多了一項日志技術--log4j2。這是要學騰訊搞微信和QQ嗎,真是666。因此,如果大家想對日志技術深入了解的話,可以去找找logback + slf4j的相關資料。至于配置文件,我認為你就了解下我下面寫的log4j配置詳解就好了,畢竟現在還是比較多公司用log4j框架的。

1.3 進入正題,log4j日志基本配置

1.在項目的classpath下或者resource包下(maven項目)新建一個log4j.properties文件,初始項目配置如下參數就足夠了,更詳細配置可繼

續看1.4 log4j日志級別配置;

#通過根日志記錄器指定日志級別及輸出源 #日志輸出的優先級: debug < info < warn < error < fatal#定義根日志記錄器的日志級別(info)及輸出源的別名(console,myFile)#該定義讓日志在控制臺和文件輸出,并且只輸出info級別以上的日志log4j.rootLogger=info,console,myFile#######配置輸出源console的具體實現為控制臺輸出########定義輸出源別名console(即根日志記錄器定義的輸出源)#的實現類是ConsoleAppender(控制臺輸出源)log4j.appender.console=org.apache.log4j.ConsoleAppender #指定日志輸出格式的格式轉換器為PatternLayout實現類log4j.appender.console.layout=org.apache.log4j.PatternLayout#定義日志輸出的具體格式log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n #######配置輸出源myFile的具體實現為文件輸出########定義輸出源別名myFile(即根日志記錄器定義的輸出源)#的實現類是RollingFileAppender(文件輸出源)log4j.appender.myFile=org.apache.log4j.RollingFileAppender#定義日志文件的存儲路徑log4j.appender.myFile.File=src/log/logProperties/log4j.log#定義日志文件的大小log4j.appender.myFile.MaxFileSize=1024kb#定義日志文件最多生成幾個(從0開始算1個,即此處最多3個文件)#超過該大小則會覆蓋前面生成的文件log4j.appender.myFile.MaxBackupIndex=2#指定日志輸出格式的格式轉換器為PatternLayout實現類log4j.appender.myFile.layout=org.apache.log4j.PatternLayout#定義日志輸出的具體格式log4j.appender.console.layout.ConversionPattern=%d %-5p [%c.%M()] - %m%n #######輸出格式解釋########%d: 日志打印的時間點,默認格式為ISO8601,也可以另外指定格式,   #定義如下: %d{yyy年MM月dd日 HH時mm分ss秒SSS},則會輸出:   #2018年01月06日 14時47分45秒590#%p: 輸出日志級別,即DEBUG,INFO,WARN,ERROR,FATAL   #%-5p:表示字符小于5位,則字符居左(不加“-”號則字符居右),你可以舉一反三#%c: 日志所在類的全名#%M: 日志所在方法的名字#%m: 日志信息#%n: 輸出一個回車換行符#%L: 輸出代碼中的行號

2.調用日志測試配置結果。

import org.apache.log4j.LogManager;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class LogPropertiesTest { public static void main(String[] args) {  /*解析非classpath下的配置文件  String log4jPath=System.getProperty("user.dir")+"//src//log//logProperties//log4j.properties";  PropertyConfigurator.configure(log4jPath);*/  Logger log = LogManager.getLogger(LogPropertiesTest.class);  log.debug("調試");  log.info("信息");  log.warn("警告");  log.error("錯誤");  log.fatal("致命錯誤"); }}

1.4日志級別配置

  日志級別配置可分為3類,一類如上配置是配置父類日志記錄器的日志級別,第二類是配置子類日志記錄器的日志級別,第三類是配置輸出源(控制臺、文件等)的日志級別。他們的日志級別解析優先級由低到高排列。具體表述原諒我說不清楚,直接
上案例,大家應該能夠懂!

1.如果配置(也必須要配置)了父類日志記錄器(rootLogger)的日志級別(假設是INFO級別),沒有配置子類日志記錄器的日志級別,也沒有配置輸出源的日志級別,則輸出源只能輸出INFO級別以上的;

2.如果配置(也必須要配置)了父類日志記錄器(rootLogger)的日志級別(假設是INFO級別),配置了子類日志記錄器的日志級別(假設是DEBUG級別),沒有配置輸出源的日志級別,則輸出源輸出DEBUG級別以上的;

3.如果配置(也必須要配置)了父類日志記錄器(rootLogger)的日志級別(假設是INFO級別),配置了子類日志記錄器的日志級別(假設是DEBUG級別),配置了輸出源的日志級別(假設是INFO級別),則輸出源輸出INFO級別以上的;

4.如果配置(也必須要配置)了父類日志記錄器(rootLogger)的日志級別(假設是INFO級別),沒有配置子類日志記錄器的日志級別,配置

了輸出源的日志級別(假設是DEBUG級別),則輸出源輸出INFO級別以上的;

因此,從上述的案例中我們可以知道日志記錄器和輸出源輸出日志級別存在2個邏輯關系:

1.輸出源如果沒有定義日志級別,它會繼承最接近它的子類日志記錄器的日志級別;子類日志記錄器沒有定義日志級別,它會繼承最接近它的父類日志記錄器。

2.打印日志時輸出源會根據自身定義的日志級別與最接近它的子類日志記錄器定義的日志級別比較,如果輸出源定義的級別高于子類日志記錄器,則按輸出源定義的日志級別輸出日志,反之則按子類日志記錄器的日志級別輸出。

所以在項目中可以按日下配置方式配置日志級別:

#控制父類日志記錄器的日志級別為info,默認所有模塊下只輸出info級別以上的日志log4j.rootLogger=info,console#單獨控制某個模塊下的日志級別為error,只有發生異常的時候才輸出日志log4j.logger.log.logProperties=error#單獨控制某個類的日志級別debug,方便輸出調試信息log4j.logger.log.logProperties.LogPropertiesTest=debug############# 日志輸出到控制臺 ############# #日志輸出到控制臺使用的api類 log4j.appender.console=org.apache.log4j.ConsoleAppender #指定當前輸出源的日志級別,有了前面的配置,就不需要配置該項了#log4j.appender.console.Threshold = info#指定日志輸出的格式:靈活的格式log4j.appender.console.layout=org.apache.log4j.PatternLayout #具體格式的內容log4j.appender.console.layout.ConversionPattern=%d %-2p [%c.%M()] - %m%n 

1.5結束語

  到此,相信你日志配置有了基本的掌握了。文中有很多地方可能會有不對的地方,歡迎各位大俠指出。我也是為了能夠深刻理解該技術的配置,才撰文總結,這樣我就會對它有更深層次的理解了。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品视频播放| 九九九热精品免费视频观看网站| 欧美国产日韩一区二区在线观看| 亚洲美女视频网| 日韩精品视频在线| 国产亚洲综合久久| 欧美精品福利在线| 国产成人精品在线观看| 色综合久综合久久综合久鬼88| 国产精品视频地址| 国产免费一区二区三区在线能观看| 97碰在线观看| 国产香蕉97碰碰久久人人| 亚洲人av在线影院| 久久久精品电影| 久久久天堂国产精品女人| 国产成人精品免高潮费视频| 国产91精品不卡视频| 国产精品久久久一区| 欧美性猛交xxxx黑人猛交| 国产精品自产拍在线观| 国产精品都在这里| 久久69精品久久久久久国产越南| 狠狠躁夜夜躁久久躁别揉| 亚洲国产精彩中文乱码av| 国产香蕉97碰碰久久人人| 亚洲国产成人在线视频| 欧美另类极品videosbestfree| 日韩在线免费视频| 国产999在线| 欧美肥老太性生活视频| 91在线高清免费观看| 久久精品国产v日韩v亚洲| 欧美高清无遮挡| 欧美日韩精品二区| 欧美电影院免费观看| 欧美成人性生活| 成人动漫网站在线观看| 欧美国产在线电影| 亚洲精品美女久久久久| 97成人超碰免| 亚洲国产精品久久久久秋霞不卡| 日韩欧美精品网址| 久久在线精品视频| 欧美日韩国产综合视频在线观看中文| 精品福利在线观看| 91成人精品网站| 在线观看日韩欧美| 成人中文字幕在线观看| 国产一区二区成人| 日韩在线国产精品| 中文日韩电影网站| 91久久精品日日躁夜夜躁国产| 久久国产精品久久国产精品| 超碰日本道色综合久久综合| 91美女片黄在线观看游戏| 高潮白浆女日韩av免费看| 欧美另类暴力丝袜| 九九精品视频在线观看| 欧美一区二区三区图| 国内自拍欧美激情| 色婷婷成人综合| 日本国产欧美一区二区三区| 日本亚洲精品在线观看| 国产精品久久久久久婷婷天堂| 中文字幕精品在线视频| 狠狠色狠狠色综合日日五| 一区二区欧美日韩视频| www日韩中文字幕在线看| 久久久999精品| 成人精品一区二区三区电影黑人| 久久久久久久久亚洲| 国产91精品久| 欧美午夜精品久久久久久人妖| 国产区亚洲区欧美区| 国产亚洲精品激情久久| 亚洲欧美日韩天堂一区二区| 精品一区二区三区四区| 亚洲老板91色精品久久| 亚洲精品98久久久久久中文字幕| 免费91麻豆精品国产自产在线观看| 国产精品色婷婷视频| x99av成人免费| 蜜臀久久99精品久久久久久宅男| 国产精品视频精品| 久久久久久久久久久成人| 亚洲欧美一区二区三区情侣bbw| 国产日韩欧美黄色| 亚洲欧美日韩中文在线制服| 亚洲免费精彩视频| 一区二区三区 在线观看视| 中文字幕日韩视频| 亚洲第一网站男人都懂| 国产精品欧美日韩久久| 久久视频在线观看免费| 综合网日日天干夜夜久久| 国产一区二区激情| 日韩精品高清在线| 一区二区欧美激情| 亚洲加勒比久久88色综合| 亚洲国产精品久久久久秋霞蜜臀| 久久久久久久久久av| 日韩美女视频免费看| 欧美日韩国内自拍| 欧美日韩第一视频| 亚洲精品美女网站| 日本精品久久久久影院| 欧美乱大交做爰xxxⅹ性3| 欧美成人免费在线观看| 操91在线视频| 欧美激情奇米色| 亚洲一区二区三区成人在线视频精品| 精品国产乱码久久久久久虫虫漫画| 久久欧美在线电影| 日韩中文字幕网站| 亚洲精品成人久久| 九九久久久久99精品| 久久久久久香蕉网| 欧美日韩一区免费| 国产精品第三页| 欧美日韩在线观看视频| 国产精品嫩草影院久久久| 亚洲第一精品夜夜躁人人爽| 久久久91精品国产一区不卡| 欧美视频免费在线观看| 欧美高清videos高潮hd| 久久国产一区二区三区| 精品国产91久久久久久| 欧美中文在线视频| 亚洲女人天堂视频| 91精品啪在线观看麻豆免费| 国产精品美女免费看| 5566成人精品视频免费| 欧美又大粗又爽又黄大片视频| 久久久在线视频| 日本高清久久天堂| 91精品国产乱码久久久久久蜜臀| 日韩欧美精品中文字幕| 丁香五六月婷婷久久激情| 青草青草久热精品视频在线观看| 国产剧情日韩欧美| 成人情趣片在线观看免费| 日韩精品免费在线视频观看| 国产精品自拍小视频| 日韩av网址在线| 久久夜精品va视频免费观看| 国产成人啪精品视频免费网| 欧美成年人视频| 久久久久亚洲精品成人网小说| 狠狠躁夜夜躁人人躁婷婷91| 国产成人啪精品视频免费网| 亚洲国产精品久久久久久| 欧美性精品220| 91九色精品视频| 亚洲电影免费在线观看| 最好看的2019的中文字幕视频| 国产精品私拍pans大尺度在线| 亚洲黄色成人网| 日韩va亚洲va欧洲va国产| 欧美日韩一区二区精品| 午夜剧场成人观在线视频免费观看| 九九九热精品免费视频观看网站| 日韩av电影中文字幕| 在线观看91久久久久久|