柚子快報邀請碼778899分享:log4j詳解與實戰(zhàn)
柚子快報邀請碼778899分享:log4j詳解與實戰(zhàn)
logger.info(“This?is?info?message.”); //?記錄error級別的信息 logger.error(“This?is?error?message.”); } }
配置文件log4j.properties:
Properties代碼 ?
#可以設(shè)置級別:debug>info>error #debug:顯示debug、info、error #info:顯示info、error #error:只error log4j.rootLogger=debug,appender1 #log4j.rootLogger=info,appender1 #log4j.rootLogger=error,appender1 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #樣式為TTCCLayout log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
輸出結(jié)果:
Console代碼 ?
[main]?DEBUG?com.coderdream.log4j.HelloLog4j?-?This?is?debug?message. [main]?INFO?com.coderdream.log4j.HelloLog4j?-?This?is?info?message. [main]?ERROR?com.coderdream.log4j.HelloLog4j?-?This?is?error?message.
通過配置文件可知,我們需要配置3個方面的內(nèi)容:
1、根目錄(級別和目的地);
2、目的地(控制臺、文件等等);
3、輸出樣式。
**
下面我們來看看Log4J的類圖:**
**Logger - 日志寫出器,供程序員輸出日志信息
Appender - 日志目的地,把格式化好的日志信息輸出到指定的地方去**
ConsoleAppender - 目的地為控制臺的Appender
FileAppender - 目的地為文件的Appender
RollingFileAppender - 目的地為大小受限的文件的Appender
Layout - 日志格式化器,用來把程序員的logging request格式化成字符串
PatternLayout - 用指定的pattern格式化logging request的Layout
**
Log4j基本使用方法**
Log4j由三個重要的組件構(gòu)成:日志信息的優(yōu)先級,日志信息的輸出目的地,日志信息的輸出格式。日志信息的優(yōu)先級從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺還是文件中;而輸出格式則控制了日志信息的顯示內(nèi)容。
一、定義配置文件
其實您也可以完全不使用配置文件,而是在代碼中配置Log4j環(huán)境。但是,使用配置文件將使您的應(yīng)用程序更加靈活。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。下面我們介紹使用Java特性文件做為配置文件的方法:
1.配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level是日志記錄的優(yōu)先級,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)。比如在這里定義了INFO級別,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來。appenderName就是指B日志信息輸出到哪個地方。您可以同時指定多個輸出目的地。
2.配置日志信息輸出目的地Appender,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產(chǎn)生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
3.配置日志信息的格式(布局),其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以e幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)
Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下: %m 輸出代碼中指定的消息
%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r 輸出自應(yīng)用啟動到輸出該log信息耗費的毫秒數(shù)
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
二、在代碼中使用Log4j
1.得到記錄器
使用Log4j,第一步就是獲取日志記錄器,這個記錄器將負責控制日志信息。其語法為:
public static Logger getLogger( String name)
通過指定的名字獲得記錄器,如果必要的話,則為這個名字創(chuàng)建一個新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.讀取配置文件
當獲得了日志記錄器之后,第二步將配置Log4j環(huán)境,其語法為:
BasicConfigurator.configure (): 自動快速地使用缺省Log4j環(huán)境。
PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性文件編寫的配置文件。
DOMConfigurator.configure ( String filename ) :讀取XML形式的配置文件。
3.插入記錄信息(格式化日志信息)
當上兩個必要步驟執(zhí)行完畢,您就可以輕松地使用不同優(yōu)先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
示例2~示例8
**【示例2】**輸出為文本文件或HTML文件
Porperties代碼 ?
#設(shè)置級別: log4j.rootLogger=debug,appender1 #輸出到文件(這里默認為追加方式) log4j.appender.appender1=org.apache.log4j.FileAppender #設(shè)置文件輸出路徑 #【1】文本文件 #log4j.appender.appender1.File=c:/Log4JDemo02.log #【2】HTML文件 log4j.appender.appender1.File=c:/Log4JDemo02.html #設(shè)置文件輸出樣式 #log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
**【示例3】**輸出為文本文件或HTML文件
Properties代碼 ?
#設(shè)置級別和多個目的地 log4j.rootLogger=debug,appender1,appender2 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #設(shè)置輸出樣式 log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout #輸出到文件(這里默認為追加方式) log4j.appender.appender2=org.apache.log4j.FileAppender #設(shè)置文件輸出路徑 #【1】文本文件 #log4j.appender.appender2.File=c:/Log4JDemo02.log #【2】HTML文件 log4j.appender.appender2.File=c:/Log4JDemo02.html #設(shè)置文件輸出樣式 #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
**【示例4】**SimpleLayout樣式
Properties代碼 ?
#設(shè)置級別和目的地 log4j.rootLogger=debug,appender1 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #設(shè)置輸出樣式 log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
輸出結(jié)果:
控制臺代碼 ?
DEBUG?-?This?is?debug?message. INFO?-?This?is?info?message. ERROR?-?This?is?error?message.
**【示例5】**自定義樣式
Java代碼 ?
#設(shè)置級別和目的地 log4j.rootLogger=debug,appender1 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #設(shè)置輸出樣式 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout #自定義樣式 #?%r?時間?0 #?%t?方法名?main #?%p?優(yōu)先級?DEBUG/INFO/ERROR #?%c?所屬類的全名(包括包名) #?%l?發(fā)生的位置,在某個類的某行 #?%m?輸出代碼中指定的訊息,如log(message)中的message #?%n?輸出一個換行 log4j.appender.appender1.layout.ConversionPattern=%r?[%t]?[%p]?-?%c?-%l?-%m%n
輸出結(jié)果:
控制臺代碼 ?
0?[main]?[DEBUG]?-?com.coderdream.log4j.HelloLog4j -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16)?-This?is?debug?message. 31?[main]?[INFO]?-?com.coderdream.log4j.HelloLog4j -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18)?-This?is?info?message. 31?[main]?[ERROR]?-?com.coderdream.log4j.HelloLog4j -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20)?-This?is?error?message.
**【示例6】**多目的地、自定義樣式
Properties代碼 ?
#設(shè)置級別和目的地 log4j.rootLogger=debug,appender1,appender2 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #設(shè)置輸出樣式 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout #自定義樣式 #?%r?時間?0 #?%t?方法名?main #?%p?優(yōu)先級?DEBUG/INFO/ERROR #?%c?所屬類的全名(包括包名) #?%l?發(fā)生的位置,在某個類的某行 #?%m?輸出代碼中指定的訊息,如log(message)中的message #?%n?輸出一個換行符號 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd?HH:mm:ss:SSS}][%C-%M]?%m%n #輸出到文件(這里默認為追加方式) log4j.appender.appender2=org.apache.log4j.FileAppender #設(shè)置文件輸出路徑 #【1】文本文件 log4j.appender.appender2.File=c:/Log4JDemo06.log #設(shè)置文件輸出樣式 log4j.appender.appender2.layout=org.apache.log4j.PatternLayout log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M]?-%m%n
【示例7】****【企業(yè)應(yīng)用】設(shè)置特定包的級別和目的地
先增加一個包,新建一個類:
Java代碼 ?
package?com.coderdream.log4jDao; import?org.apache.log4j.Logger; public?class?HelloDao?{ private?static?Logger?logger?=?Logger.getLogger(HelloDao.class); /** *?@param?args */ public?static?void?main(String[]?args)?{ //?記錄debug級別的信息 logger.debug(“This?is?debug?message?from?Dao.”); //?記錄info級別的信息 logger.info(“This?is?info?message?from?Dao.”); //?記錄error級別的信息 logger.error(“This?is?error?message?from?Dao.”); } }
如果這個類作為基類,如J2EE中的BaseDao、BaseAction、BaseService等等,則我們可以將各層的日志信息分類輸出到各個文件。
Properties代碼 ?
#省略根,只設(shè)置特定包的級別和目的地 log4j.logger.com.coderdream.log4j=debug,appender1 log4j.logger.com.coderdream.log4jDao=info,appender1,appender2 #輸出到控制臺 log4j.appender.appender1=org.apache.log4j.ConsoleAppender #設(shè)置輸出樣式 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout #自定義樣式 #?%r?時間?0 #?%t?方法名?main #?%p?優(yōu)先級?DEBUG/INFO/ERROR #?%c?所屬類的全名(包括包名) #?%l?發(fā)生的位置,在某個類的某行 #?%m?輸出代碼中指定的訊息,如log(message)中的message #?%n?輸出一個換行符號 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd?HH:mm:ss:SSS}][%C-%M]?%m%n #輸出到文件(這里默認為追加方式) log4j.appender.appender2=org.apache.log4j.FileAppender #設(shè)置文件輸出路徑 #【1】文本文件 log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log #設(shè)置文件輸出樣式 log4j.appender.appender2.layout=org.apache.log4j.PatternLayout log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M]?-%m%n
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習,但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔。
既有適合小白學(xué)習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/p>
最后總結(jié)
ActiveMQ+Kafka+RabbitMQ學(xué)習筆記PDF
RabbitMQ實戰(zhàn)指南
手寫RocketMQ筆記
手寫“Kafka筆記”
關(guān)于分布式,限流+緩存+緩存,這三大技術(shù)(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。這些相關(guān)的面試也好,還有手寫以及學(xué)習的筆記PDF,都是啃透分布式技術(shù)必不可少的寶藏。以上的每一個專題每一個小分類都有相關(guān)的介紹,并且小編也已經(jīng)將其整理成PDF啦 《互聯(lián)網(wǎng)大廠面試真題解析、進階開發(fā)核心學(xué)習筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲取! g-community.csdnimg.cn/images/e5c14a7895254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
最后總結(jié)
ActiveMQ+Kafka+RabbitMQ學(xué)習筆記PDF
[外鏈圖片轉(zhuǎn)存中…(img-u0OyQqi3-1713222314730)]
RabbitMQ實戰(zhàn)指南
[外鏈圖片轉(zhuǎn)存中…(img-2gaUgStC-1713222314730)]
手寫RocketMQ筆記
[外鏈圖片轉(zhuǎn)存中…(img-s4PstSnq-1713222314730)]
手寫“Kafka筆記”
[外鏈圖片轉(zhuǎn)存中…(img-us14s0lv-1713222314730)]
關(guān)于分布式,限流+緩存+緩存,這三大技術(shù)(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。這些相關(guān)的面試也好,還有手寫以及學(xué)習的筆記PDF,都是啃透分布式技術(shù)必不可少的寶藏。以上的每一個專題每一個小分類都有相關(guān)的介紹,并且小編也已經(jīng)將其整理成PDF啦 《互聯(lián)網(wǎng)大廠面試真題解析、進階開發(fā)核心學(xué)習筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲取!
柚子快報邀請碼778899分享:log4j詳解與實戰(zhàn)
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。