最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

深入解析SSH框架——Log4j與Log4j2

2021-03-25 13:34 作者:動(dòng)力節(jié)點(diǎn)小王本王  | 我要投稿



Log4j ?Log4j2

一個(gè)完整的軟件,日志是必不可少的。程序從開(kāi)發(fā)、測(cè)試、維護(hù)、運(yùn)行等環(huán)節(jié),都需要向控制臺(tái)或文件等位置輸出大量信息。這些信息的輸出, 在很多時(shí)候是使用System.out.println()無(wú)法完成的。

日志信息根據(jù)用途與記錄內(nèi)容的不同,分為調(diào)試日志、運(yùn)行日志、異常日志等。 用于日志記錄的技術(shù)很多,如 jdk?的 logger?技術(shù),apache?的 log4j、log4j2?技術(shù)等。

Log4j 的全稱(chēng)為 Log for java,即,專(zhuān)門(mén)用于 java 語(yǔ)言的日志記錄工具。其目前有兩個(gè)版本:Log4j 與 Log4j2。

Log4j?基礎(chǔ)

  • Log4j?的下載

Log4j 下載地址:http://logging.apache.org

1Log4j 版本下載

2Logfj2 版本下載

日志級(jí)別

為了方便對(duì)于日志信息的輸出顯示,對(duì)日志內(nèi)容進(jìn)行了分級(jí)管理。日志級(jí)別由高到低 , 共分 6 個(gè)級(jí)別:fatal(致命的)、error、warn、info、debug、trace(堆棧)。

為什么要對(duì)日志進(jìn)行分級(jí)呢?

無(wú)論是將日志輸出到控制臺(tái),還是文件,其輸出都會(huì)降低程序的運(yùn)行效率。但由于調(diào)試、運(yùn)行維護(hù)的需要,客戶(hù)的要求等原因,需要進(jìn)行必要的日志輸出。這時(shí)就必須要在代碼中加入日志輸出語(yǔ)句。

這些輸出語(yǔ)句若在程序運(yùn)行時(shí)全部執(zhí)行, 則勢(shì)必會(huì)降低運(yùn)行效率。例如, 使用System.out.println()將信息輸出到控制臺(tái),則所有的該輸出語(yǔ)句均將執(zhí)行。會(huì)大大降低程序的執(zhí)行效率。而要使其不輸出,唯一的辦法就是將這些輸出語(yǔ)句逐個(gè)全部刪除。這是個(gè)費(fèi)時(shí)費(fèi)力的過(guò)程。

將日志信息進(jìn)行分級(jí)管理,便可方便的控制信息輸出內(nèi)容及輸出位置:哪些信息需要輸出,哪些信息不需要輸出,只需在一個(gè)日志輸出控制文件中稍加修改即可。而代碼中的輸出語(yǔ)句不用做任何修改。

從這個(gè)角度來(lái)說(shuō),代碼中的日志編寫(xiě),其實(shí)就是寫(xiě)大量的輸出語(yǔ)句。只不過(guò),這些輸出語(yǔ)句比較特殊,它們具有級(jí)別,在程序運(yùn)行期間不一定被執(zhí)行。它們的執(zhí)行是由另一個(gè)控制文件控制。

日志輸出控制文件

Log4j 的日志輸出控制文件,主要由三個(gè)部分構(gòu)成:

(1)?日志信息的輸出位置:控制日志信息將要輸出的位置,是控制臺(tái)還是文件等。

(2)?日志信息的輸出格式:控制日志信息的顯示格式,即以怎樣的字符串形式顯示。

(3)?日志信息的輸出級(jí)別:控制日志信息的顯示內(nèi)容,即顯示哪些級(jí)別的日志信息。

有了日志輸出控制文件,代碼中只要設(shè)置好日志信息內(nèi)容及其級(jí)別即可,通過(guò)控制文件便可控制這些日志信息的輸出了。

Log4j?技術(shù)

在程序中的日志實(shí)現(xiàn)步驟

項(xiàng)目:log4j

若要在自己的程序中寫(xiě)入日志語(yǔ)句,則可按照以下步驟進(jìn)行:

(1)?導(dǎo)入 Jar?包

在項(xiàng)目中導(dǎo)入 log4j 需要的 jar 包。將 Log4j 框架的 zip 文件進(jìn)行解壓,在其根目錄下就有其 Jar 包。

(2)?放入日志輸出控制文件

將屬性文件 log4j.properties 直接放到項(xiàng)目的 src 下

(3)?代碼中實(shí)現(xiàn)日志記錄

在要輸出日志的類(lèi)中創(chuàng)建日志對(duì)象 Logger,并通過(guò) Logger 的方法在代碼中加入日志輸出語(yǔ)句。在 Java 代碼中進(jìn)行日志輸出,需要用到 Logger 類(lèi)的靜態(tài)方法getLogger()。

注意,Logger 為 org.apache.log4j 包中的類(lèi)。

將來(lái)這些日志輸出語(yǔ)句,會(huì)根據(jù) log4j.properties 文件中日志級(jí)別的設(shè)置進(jìn)行輸出,會(huì)輸出到指定位置。其輸出結(jié)果是:輸出指定級(jí)別及其更高級(jí)別的信息。如指定 info 級(jí)別,則會(huì)輸出 fatal、error、warn、info 級(jí)別的信息。就本例而言,會(huì)執(zhí)行以下三句,而不會(huì)執(zhí)行 debug() 方法。

日志輸出控制文件分析

日志屬性文件 log4j.properties 是專(zhuān)門(mén)用于控制日志輸出的。其主要進(jìn)行三方面控制:

  • 輸出位置:控制日志將要輸出的位置,是控制臺(tái)還是文件等。

  • 輸出布局:控制日志信息的顯示形式

  • 輸出級(jí)別:控制要輸出的日志級(jí)別。

日志屬性文件由兩個(gè)對(duì)象組成:日志附加器與根日志。

根日志,即為 Java 代碼中的日志記錄器,其主要由兩個(gè)屬性構(gòu)成:日志輸出級(jí)別與日志附加器。

日志附加器,則由日志輸出位置定義,由其它很多屬性進(jìn)行修飾,如輸出布局、文件位

置、文件大小等。

1定義日志附加器 appender

所謂日志附加器,就是為日志記錄器附加上很多其它設(shè)置信息。附加器的本質(zhì)是一個(gè)接口,其定義語(yǔ)法為:log4j.appender.appenderName?= 輸出位置

appenderName 為自定義名稱(chēng)。

輸出位置為 log4j 指定的類(lèi)型,是定義好的一些 appender 接口的實(shí)現(xiàn)類(lèi)。查看 log4j 框架解壓目錄下的站點(diǎn)目錄 site 的 index.jsp 中的 JavaDoc,可看到 log4j 的 API。

例如定義了一個(gè)名稱(chēng)為 console 的控制臺(tái)附加器:

常用的附加器實(shí)現(xiàn)類(lèi)如下:

  • org.apache.log4j.ConsoleAppender:日志輸出到控制臺(tái)

  • org.apache.log4j.FileAppender:日志輸出到文件

  • org.apache.log4j.RollingFileAppender:當(dāng)日志文件大小到達(dá)指定尺寸的時(shí)候?qū)a(chǎn)生一個(gè)新的日志文件

  • org.apache.log4j.DailyRollingFileAppender:每天產(chǎn)生一個(gè)日志文件

2)修飾日志附加器

所謂修飾日志附加器,就是為定義好的附加器添加一些屬性,以控制到指定位置的輸出。

不同的附加器,其修飾屬性不同。

  • 控制臺(tái)附加器:

Target:控制輸出到控制臺(tái)的使用目標(biāo)。其值為?System.out??或?Sytem.err。它們的區(qū)別是, System.out 是以黑色字體顯示到控制臺(tái),而 System.err 則是以紅色字體顯示。

  • 文件附加器:

File:日志要輸出的文件位置及文件名稱(chēng)。

  • 滾動(dòng)文件附加器:

MaxFileSize:用于指定日志文件的最大值。若文件超過(guò)指定值,將自動(dòng)產(chǎn)生另一個(gè)日志文件。

Log4j 常用布局類(lèi)型:

  • org.apache.log4j.HTMLLayout:網(wǎng)頁(yè)布局,以 HTML?表格形式布局

  • org.apache.log4j.SimpleLayout:簡(jiǎn)單布局,包含日志信息的級(jí)別和信息字符串

  • org.apache.log4j.PatternLayout:匹配器布局,可以靈活地指定布局模式。其主要是通過(guò)設(shè)置 PatternLayout?的 ConversionPattern?屬 性 值 來(lái) 控 制 具 體 輸 出 格 式 的 。ConversionPattern?的值中有很多控制字符,這些字符的意義如下表所示:

    ConversionPattern 取值說(shuō)明

? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?(本表格來(lái)自互聯(lián)網(wǎng))

3)配置根 Logger

配置rootLogger,以便于代碼加載來(lái)控制日志的輸出。其語(yǔ)法為: log4j.rootLogger = [ level ] , appenderName, …

其中,level 是日志記錄的優(yōu)先級(jí),分為 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。Log4j 建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是 ERROR、WARN、INFO、DEBUG。OFF 為關(guān)閉日志功能。

低級(jí)別的可以顯示高級(jí)別的,但高級(jí)別的不能顯示低級(jí)別的。所以,級(jí)別越高,將來(lái)顯示的信息就越少。

Log4j2?技術(shù)

og4j2,是對(duì) Log4j 的升級(jí),其在配置與使用上發(fā)生了較大變化。

在程序中的日志實(shí)現(xiàn)步驟

項(xiàng)目:log4j2

(1)導(dǎo)入 Jar 包

使用 Log4j2,需要導(dǎo)入其 Jar 包。Log4j 框架解壓目錄中找到如下兩個(gè) jar 包:

(2)?放入日志輸出控制文件

將文件 log4j2.xml 直接放到項(xiàng)目的 src 下。log4j2 配置文件是 XML 文件,不再支持

properties 文件。默認(rèn)的文件名為 log4j2.xml。其存放的位置為 classpath 中。

(3)?代碼中實(shí)現(xiàn)日志記錄

在要輸出日志的類(lèi)中創(chuàng)建日志對(duì)象 Logger,并通過(guò) Logger 的方法在代碼中加入日志輸出語(yǔ)句。該日志對(duì)象是通過(guò)靜態(tài)類(lèi) LogManager 的 getLogger()方法獲取的。

注意,Logger 與 LogManager 均為 org.apache.logging.log4j 包中的類(lèi),非 org.apache.log4j

包中的。

日志輸出控制文件分析

log4j2 配置文件是 XML 文件,不再支持 properties 文件。默認(rèn)的文件名為 log4j2.xml。其存放的位置為classpath 中。

若沒(méi)有設(shè)置 log4j2.xml,則系統(tǒng)會(huì)使用默認(rèn)的日志配置:只會(huì)輸出到控制臺(tái) error 級(jí)別的信息。

配置文件說(shuō)明:

1<configuration/>標(biāo)簽

<configuration/>標(biāo)簽的 status 屬性用于設(shè)置 Log4j2 自身運(yùn)行的日志顯示級(jí)別,一般為OFF,不顯示。當(dāng)然,也可以設(shè)置為 ERROR、DEBUG 等其它級(jí)別。

2<Console/>標(biāo)簽

<Console/>標(biāo)簽的 target 屬性用于設(shè)置輸出的目標(biāo)形式,其值一般為:

SYSTEM_OUT 或 SYSTEM_ERR

(3)<File/>標(biāo)簽?

<File/>標(biāo)簽的 fileName 屬性用于設(shè)置文件的文件保存路徑及文件名。如本例的意思是, 日志文件名為 test.log,將其存放在當(dāng)前項(xiàng)目的根目錄下的 log 子目錄中。 append 屬性用于設(shè)置是否以追加方式將日志寫(xiě)入指定文件。

<RollingFile/>標(biāo)簽的<SizeBasedTriggeringPolicy/>子標(biāo)簽用于指定每一個(gè)日志文件最大文件大小。當(dāng)達(dá)到這個(gè)指定值后,會(huì)自動(dòng)再新建一個(gè)日志文件。

(4)<RollingFile/>標(biāo)簽?

fileName 指定存放目錄及第一個(gè)日志文件名。filePattern 指定新創(chuàng)建的日志文件的文件 名。本例還會(huì)對(duì)文件進(jìn)行壓縮。

(5)?<loggers/>標(biāo)簽

用于配置根 Logger 對(duì)象,以指定所使用的日志記錄器,及顯示的級(jí)別。

其子標(biāo)簽<root/>用于指定所使用的日志記錄器。該子標(biāo)簽的屬性 level用于指定顯示級(jí)別。而日志記錄器是通過(guò)<root/>的子標(biāo)簽<appender-ref/>來(lái)引用<appenders/>中定義好的記錄器的。

需要注意的是,只要在<appenders/>中定義了<File/>、<RollingFile/>等,且在其中指定了日志存放的目錄,那么這些目錄就會(huì)自動(dòng)創(chuàng)建。無(wú)論在<loggers/>的<root/>中是否聲明使用它們。

slf4j?日志框架

在學(xué)習(xí) Java 框架過(guò)程中,對(duì)于 Log4j 的使用,主要是為了使代碼運(yùn)行過(guò)程中輸出較多的提示,以便于調(diào)試。并非自己編寫(xiě)日志。

為了使框架具有一般性,框架對(duì)于日志的支持,一般不指定具體的日志實(shí)現(xiàn)技術(shù),而是使用了一個(gè)日志框架 slf4j。通過(guò)slf4j,可以讓程序員自己確定使用具體的哪種日志實(shí)現(xiàn)技術(shù)。Java 中的很多框架都是使用的slf4j,即這些框架中的日志代碼都是使用的slf4j的API 處理日志的。

slf4j,Simple Logging Facade for Java,簡(jiǎn)單日志門(mén)面。其不是具體的日志解決方案,不做具體的日志服務(wù)。它僅僅是一種規(guī)范,一個(gè)接口。而Log4j 則是slf4j的一種具體實(shí)現(xiàn),提供具體的日志服務(wù)。

slf4j 有自己?jiǎn)为?dú)的一套 API,這套API 與具體的日志實(shí)現(xiàn)技術(shù)的 API 是不同的。為了能使 slf4j 的 API 與具體日志實(shí)現(xiàn)技術(shù) API 結(jié)合到一起,在 slf4j 與具體日志技術(shù)之間,還需要一個(gè)連接的 jar。這個(gè) jar 在 sfl4j 框架中存放著。

最后奉上視頻教程??,視頻觀看效果更佳!!走過(guò)路過(guò)別忘素質(zhì)三連哦~~


深入解析SSH框架——Log4j與Log4j2的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
巴东县| 济阳县| 河北省| 河源市| 林芝县| 宾阳县| 玉屏| 隆安县| 囊谦县| 怀安县| 宜城市| 吉林省| 滨州市| 伊金霍洛旗| 广饶县| 彝良县| 兴城市| 尼玛县| 鄂托克前旗| 玉溪市| 丹江口市| 三门县| 新平| 来凤县| 宣威市| 封丘县| 桐梓县| 杨浦区| 龙陵县| 奉贤区| 青浦区| 佛教| 凤凰县| 名山县| 碌曲县| 筠连县| 微博| 宜丰县| 扎鲁特旗| 永丰县| 曲阜市|