溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

apache中Log4j和Log4j2的區(qū)別有哪些

發(fā)布時(shí)間:2021-12-16 17:43:02 來(lái)源:億速云 閱讀:227 作者:小新 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)apache中Log4j和Log4j2的區(qū)別有哪些,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

1、配置文件類型 

log4j是通過(guò)一個(gè).properties的文件作為主配置文件的,而現(xiàn)在的log4j 2則已經(jīng)棄用了這種方式,采用的是.xml,.json或者.jsn這種方式來(lái)做,可能這也是技術(shù)發(fā)展的一個(gè)必然性,畢竟properties文件的可閱讀性真的是有點(diǎn)差。

2、核心JAR包 

log4j只需要引入一個(gè)jar包即可,

<dependency>

    <groupId>log4j</groupId>

    <artifactId>log4j</artifactId>

    <version>1.2.17</version>

</dependency>

而log4j 2則是需要2個(gè)核心

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-core</artifactId>

    <version>2.5</version>

</dependency>

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-api</artifactId>

    <version>2.5</version>

</dependency>

大家發(fā)現(xiàn)沒(méi),log4j和log4j 2的包路徑是不同的,Apache為了區(qū)分,包路徑都更新了,這樣大家甚至可以在一個(gè)項(xiàng)目中使用2個(gè)版本的日志輸出哦!(不過(guò)我想你們沒(méi)有那么調(diào)皮吧,嘿嘿)

3、文件渲染 

log4j想要生效,我們需要在web.xml中進(jìn)行配置,

 <listener>

    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

  </listener> <context-param>

    <param-name>log4jConfigLocation</param-name>

    <param-value>classpath:config/log4j.properties</param-value>

  </context-param>

  <context-param>

    <param-name>log4jRefreshInterval</param-name>

    <param-value>60000</param-value>

這段配置目的在于告訴工程去哪加載log4j的配置文件和定義一個(gè)掃描器,這樣可以隨心所欲的放置log4j配置文件。 

log4j2就比較簡(jiǎn)單,以maven工程為例,我們只需要把log4j2.xml放到工程resource目錄下就行了。大家記住一個(gè)細(xì)節(jié)點(diǎn),是log4j2.xml,而不是log4j.xml,xml名字少個(gè)2都不行??!

喜歡做學(xué)問(wèn)的小伙伴,有興趣可以去研究下,照我估計(jì)應(yīng)該是在log4j2的包里面配置死了,而且大家可以嘗試下怎么自定義log4j2.xml的位置。

4、Log調(diào)用 

log4j和log4j2調(diào)用都是很簡(jiǎn)單的。 

log4j:

import org.apache.log4j.Logger;

private final Logger LOGGER = Logger.getLogger(Test.class.getName());

log4j2:

import org.apache.logging.log4j.Level;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

private static Logger logger = LogManager.getLogger(Test.class.getName());

5、配置文件方式 

最關(guān)鍵的最大的不同,那就是配置文件的區(qū)別了,大家具體使用的時(shí)候再根據(jù)你的情況進(jìn)行配置就行了。 

log4j2 例子如下:

<?xml version="1.0" encoding="UTF-8"?>    

<configuration status="error">  

<!--     先定義所有的appender -->  

    <appenders>  

<!--         這個(gè)輸出控制臺(tái)的配置 -->  

        <Console name="Console" target="SYSTEM_OUT">  

<!--             控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch),其他的直接拒絕(onMismatch) -->  

            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  

<!--             這個(gè)都知道是輸出日志的格式 -->  

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </Console>  

<!--         文件會(huì)打印出所有信息,這個(gè)log每次運(yùn)行程序會(huì)自動(dòng)清空,由append屬性決定,這個(gè)也挺有用的,適合臨時(shí)測(cè)試用 -->  

<!--         append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內(nèi)容,默認(rèn)值是true -->  

        <File name="log" fileName="log/test.log" append="false">  

            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </File>  

<!--          添加過(guò)濾器ThresholdFilter,可以有選擇的輸出某個(gè)級(jí)別以上的類別  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕  -->  

        <File name="ERROR" fileName="logs/error.log">  

            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>  

            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  

        </File>  

<!--         這個(gè)會(huì)打印出所有的信息,每次大小超過(guò)size,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔 -->  

        <RollingFile name="RollingFile" fileName="logs/web.log"  

                     filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">  

            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  

            <SizeBasedTriggeringPolicy size="2MB"/>  

        </RollingFile>  

    </appenders>  

<!--     然后定義logger,只有定義了logger并引入的appender,appender才會(huì)生效 -->  

    <loggers>  

<!--         建立一個(gè)默認(rèn)的root的logger -->  

        <root level="trace">  

            <appender-ref ref="RollingFile"/>  

            <appender-ref ref="Console"/>  

            <appender-ref ref="ERROR" />  

            <appender-ref ref="log"/>  

        </root>  

    </loggers>  

</configuration>  

總結(jié): 

技術(shù)總是在不斷進(jìn)步的,我們不能局限在已知的知識(shí)領(lǐng)域中,要不斷去創(chuàng)新,去嘗試!

附:

日志的級(jí)別:     

我們現(xiàn)在要調(diào)用logger的方法,不過(guò)在這個(gè)Logger對(duì)象中,有很多方法,所以要先了解log4j的日志級(jí)別,log4j規(guī)定了默認(rèn)的幾個(gè)級(jí)別:trace<debug<info<warn<error<fatal等。這里要說(shuō)明一下:    

級(jí)別之間是包含的關(guān)系,意思是如果你設(shè)置日志級(jí)別是trace,則大于等于這個(gè)級(jí)別的日志都會(huì)輸出。

基本上默認(rèn)的級(jí)別沒(méi)多大區(qū)別,就是一個(gè)默認(rèn)的設(shè)定。你可以通過(guò)它的API自己定義級(jí)別。你也可以隨意調(diào)用這些方法,不過(guò)你要在配置文件里面好好處理了,否則就起不到日志的作用了,而且也不易讀,相當(dāng)于一個(gè)規(guī)范,你要完全定義一套也可以,不用沒(méi)多大必要。從我們實(shí)驗(yàn)的結(jié)果可以看出,log4j默認(rèn)的優(yōu)先級(jí)為ERROR或者WARN(實(shí)際上是ERROR)    

這不同的級(jí)別的含義大家都很容易理解,這里就簡(jiǎn)單介紹一下:

trace:  是追蹤,就是程序推進(jìn)以下,你就可以寫個(gè)trace輸出,所以trace應(yīng)該會(huì)特別多,不過(guò)沒(méi)關(guān)系,我們可以設(shè)置最低日志級(jí)別不讓他輸出。

debug:調(diào)試么,我一般就只用這個(gè)作為最低級(jí)別,trace壓根不用。是在沒(méi)辦法就用eclipse或者idea的debug功能就好了么。

info: 輸出一下你感興趣的或者重要的信息,這個(gè)用的最多了。

warn: 有些信息不是錯(cuò)誤信息,但是也要給程序員的一些提示,類似于eclipse中代碼的驗(yàn)證不是有error 

和warn(不算錯(cuò)誤但是也請(qǐng)注意,比如以下depressed的方法)。

error: 錯(cuò)誤信息。用的也比較多。

fatal:級(jí)別比較高了。重大錯(cuò)誤,這種級(jí)別你可以直接停止程序了,是不應(yīng)該出現(xiàn)的錯(cuò)誤么!不用那么緊張,其實(shí)就是一個(gè)程度的問(wèn)題。

關(guān)于“apache中Log4j和Log4j2的區(qū)別有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI