Log4j、Log4j2的日誌輸出級別和配置文件詳解

Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先級從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯仍是文件中;而輸出格式則控制了日誌信息的顯示內容。java

1、Log4j的日誌輸出級別:web

一、  log4j的八個日誌級別:OFF FATAL ERROR WARN INFO DEBUG TRACE ALLsql

ALL 各級包括自定義級別apache

DEBUG 指定細粒度信息事件是最有用的應用程序調試json

ERROR 錯誤事件可能仍然容許應用程序繼續運行app

FATAL 指定很是嚴重的錯誤事件,這可能致使應用程序停止dom

INFO 指定可以突出在粗粒度級別的應用程序運行狀況的信息的消息佈局

OFF 這是最高等級,爲了關閉日誌記錄測試

TRACE 指定細粒度比DEBUG更低的信息事件spa

WARN 指定具備潛在危害的狀況

二、  log4j的核心,系統啓動日誌級別a,日誌打印級別b,在記錄日誌請求是b>=a,日誌能夠打印出來。級別順序:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

三、  log4j建議使用四個日誌級別2個日誌開關

DEBUG:輸出調試信息;指出細粒度信息事件對調試應用程序是很是有幫助的。

INFO: 輸出提示信息;消息在粗粒度級別上突出強調應用程序的運行過程。

WARN: 輸出警告信息;代表會出現潛在錯誤的情形。

ERROR:輸出錯誤信息;指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。

FATAL: 輸出致命錯誤;指出每一個嚴重的錯誤事件將會致使應用程序的退出。

ALL level:打開全部日誌記錄開關;是最低等級的,用於打開全部日誌記錄。

OFF level:關閉全部日誌記錄開關;是最高等級的,用於關閉全部日誌記錄。

2、Log4j.properties配置文件詳解

 

一、log4j.rootLogger=DEBUG,console,FILE

log4j.rootLogger用來配置日誌輸出的優先級和日誌輸出的目的地。第一個字DEBUG指定優先級,只能指定一個字段。第二個字段和第三個字段,用來指定日誌輸出的目的地。console表明輸出到控制檯,FILE表明輸出到文件。若是隻有一個輸出目的地,咱們也能夠只指定一個字段。

 

二、log4j.appender.console=org.apache.log4j.ConsoleAppender、og4j.appender.console用來配置具體的類,這裏的console就是咱們在上面定義的log4j.rootLogger=DEBUG,console,FILE

 

三、log4j.appender.console.threshold=INFO

threshold是個全局的過濾器,把低於所設置的level的信息過濾掉,不顯示出來。

 

四、log4j.appender.console.layout=org.apache.log4j.PatternLayout

指定佈局樣式,Log4j具備如下幾種類型的佈局Layout

PatternLayout:根據指定的轉換模式格式化日誌輸出

HTMLLayout:格式化日誌輸出爲HTML表格

XMLLayout:格式化日誌輸出爲XML文件

SimpleLayout:以一種很是簡單的方式格式化日誌輸出

TTCCLayout:包含日誌產生的時間、線程、類別等信息

 

五、log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n

設置日誌的佈局格式

 

六、log4j.appender.FILE=org.apache.log4j.RollingFileAppender

輸出到文件

org.apache.log4j.ConsoleAppender(輸出日誌到控制檯)

org.apache.log4j.FileAppender(輸出日誌到文件)

org.apache.log4j.DailyRollingFileAppender(輸出日誌到文件,且天天產生一個日誌文件)

org.apache.log4j.RollingFileAppender(輸出日誌到文件,且文件大小到達指定尺寸的時候產生一個新的文件)

org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

 

ConsoleAppender選項:

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Target=System.err:默認值是System.out。

 

FileAppender選項:

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。

File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。

 

DailyRollingFileAppender選項:

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。

File=D:/logs/logging.log4j:指定當前消息輸出到logging.log4j文件中。

DatePattern='.'yyyy-MM:每個月滾動一第二天志文件,即每個月產生一個新的日誌文件。當前月的日誌文件名爲logging.log4j,前一個月的日誌文件名logging.log4j.yyyy-MM。

另外,也能夠指定按周、天、時、分等來滾動日誌文件,對應的格式以下:

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:每分鐘

 

RollingFileAppender選項:

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。

File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。

MaxFileSize=100KB:後綴能夠是KB, MB 或者GB。在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1文件中。

MaxBackupIndex=2:指定能夠產生的滾動文件的最大數,例如,設爲2則能夠產生logging.log4j.1,logging.log4j.2兩個滾動文件

和一個logging.log4j文件。

 

七、log4j.appender.FILE.Append=true

是否追加:是

 

八、log4j.appender.FILE.File=../logs/log4jtest.log

日誌文件路徑

 

九、log4j.appender.FILE.MaxFileSize=10MB

設置文件大小超過10MB之後自動改名,將原來的日誌移動到新的新的文件中,打包備份。

 

十、log4j.appender.FILE.MaxBackupIndex=50

設置能夠產生的滾動文件的最大數量,也就是能夠產生的備份文件的最大數量。

3、實戰應用

Log4j.properties配置:

log.home=D:\\weblogiclog

log4j.rootLogger=DEBUG

#credit

log4j.logger.credit=WARN,credit,console

#console

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=%d{yyyy/MM/dd HH\:mm\:ss,SSS} [%-3p][class:%l] %m %n

#bcmp-tran-credit.log

log4j.appender.credit=com.paic.cmp.esb.util.MinuteRollingAppender

log4j.appender.credit.Append=true

#'.'yyyy-MM-dd-HH-mm,對應minutely(每分鐘)

log4j.appender.credit.File=${log.home}/bcmp-tran-credit.log

log4j.appender.credit.intervalTime=2

log4j.appender.credit.layout=org.apache.log4j.PatternLayout

log4j.appender.credit.layout.ConversionPattern=%d{yyyy/MM/dd HH\:mm\:ss,SSS} [%-3p][class:%l] %m %n

日誌輸出配置:

         代碼中日誌打印級別默認INFO

一、  log.home:日誌輸出文件路徑

log4j.rootLogger:日誌輸出優先級(DEBUG)a

log4j.logger.credit:日誌輸出級別b、日誌輸出到文件bcmp-tran-credit.log、日誌輸出到控制檯

當b>=a,日誌輸出到文件及控制檯

二、  當log4j.logger.credit=DEBUG,credit 因爲a=DEBUG 日誌只輸出到文件

三、  當log4j.logger.credit=WARN,credit,console 因爲WARN>IFNO 日誌不輸出。

Log4j所需jar:log4j-XXX.jar

 

4、log4j2.xml配置文件詳解

         一、配置文件的名稱以及在項目中的存放位置

        log4j 2.x版本不支持1.x中的.properties後綴的文件配置方式,2.x版本配置文件後綴名只能爲".xml",".json"或者".jsn"。

  系統選擇配置文件的優先級(從先到後)以下:

.classpath下的名爲log4j2-test.json 或者log4j2-test.jsn的文件.

.classpath下的名爲log4j2-test.xml的文件.

.classpath下名爲log4j2.json 或者log4j2.jsn的文件.

.classpath下名爲log4j2.xml的文件.

咱們通常默認使用log4j2.xml進行命名。若是本地要測試,能夠把log4j2-test.xml放到classpath,而正式環境使用log4j2.xml,則在打包部署的時候不要打包log4j2-test.xml便可。

二、配置文件節點解析

(1)根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(代表能夠定義多個Appender和Logger).

status用來指定log4j自己的打印日誌的級別.

monitorinterval用於指定log4j自動從新配置的監測間隔時間,單位是s,最小是5s.

(2)Appenders節點,常見的有三種子節點:Console、RollingFile、File.

Console節點用來定義輸出到控制檯的Appender.

name:指定Appender的名字.

target:SYSTEM_OUT 或 SYSTEM_ERR,通常只設置默認:SYSTEM_OUT.

PatternLayout:輸出格式,不設置默認爲:%m%n.

 

File節點用來定義輸出到指定位置的文件的Appender.

name:指定Appender的名字.

fileName:指定輸出日誌的目的文件帶全路徑的文件名.

PatternLayout:輸出格式,不設置默認爲:%m%n.

 

RollingFile節點用來定義超過指定大小自動刪除舊的建立新的的Appender.

name:指定Appender的名字.

fileName:指定輸出日誌的目的文件帶全路徑的文件名.

PatternLayout:輸出格式,不設置默認爲:%m%n.

filePattern:指定新建日誌文件的名稱格式.

Policies:指定滾動日誌的策略,就是何時進行新建日誌文件輸出日誌.

TimeBasedTriggeringPolicy:Policies子節點,基於時間的滾動策略,interval屬性用來指定多久滾動一次,默認是1 hour。modulate=true用來調整時間:好比如今是早上3am,interval是4,那麼第一次滾動是在4am,接着是8am,12am...而不是7am.

SizeBasedTriggeringPolicy:Policies子節點,基於指定文件大小的滾動策略,size屬性用來定義每一個日誌文件的大小.

DefaultRolloverStrategy:用來指定同一個文件夾下最多有幾個日誌文件時開始刪除最舊的,建立新的(經過max屬性)。

(3)Loggers節點,常見的有兩種:Root和Logger.

Root節點用來指定項目的根日誌,若是沒有單獨指定Logger,那麼就會默認使用該Root日誌輸出

level:日誌輸出級別,共有8個級別,按照從低到高爲:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

AppenderRef:Root的子節點,用來指定該日誌輸出到哪一個Appender.

 

Logger節點用來單獨指定日誌的形式,好比要爲指定包下的class指定不一樣的日誌級別等。

level:日誌輸出級別,共有8個級別,按照從低到高爲:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

name:用來指定該Logger所適用的類或者類所在的包全路徑,繼承自Root節點.

AppenderRef:Logger的子節點,用來指定該日誌輸出到哪一個Appender,若是沒有指定,就會默認繼承自Root.若是指定了,那麼會在指定的這個Appender和Root的Appender中都會輸出,此時咱們能夠設置Logger的additivity="false"只在自定義的Appender中進行輸出。

四、  完整的配置模版

 

5、log4j2.xml實戰

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

<configuration status="info">

         <Appenders>

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

                            <PatternLayout pattern="[%d{HH:mm:ss.SSS}] [%-3p] %x %c{1}: %m%n" />

                            <!--

                            <filter class="org.apache.log4j.varia.LevelRangeFilter">

                            <param name="LevelMin" value="WARN"/>

                            <param name="LevelMax" value="ERROR"/>

                            </filter>-->

                   </Console>

                   <RollingRandomAccessFile name="logFile"

                            fileName="D:/log/pafa.log" filePattern="pafa.log.%d{yyyyMMdd}"

                            immediateFlush="false" bufferSize="262144">

                            <PatternLayout pattern="%d{MM/dd HH:mm:ss.sss} [%-3p] %c{1}: %m%n" />

                            <Policies>

                                     <TimeBasedTriggeringPolicy interval="1"

                                               modulate="true" />

                            </Policies>

                   </RollingRandomAccessFile>

                   <Async name="logFileAsync" bufferSize="2000" blocking="false">

                            <AppenderRef ref="logFile" />

                   </Async>

                  

                  

                   <RollingRandomAccessFile name="credit"

                                                                            fileName="D:/log/credit.log" filePattern="credit-%d{yyyy-MM-dd}-%i.log">

                            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%p] [%t] %c{1} - %m%n"/>

                            <Policies>

                                     <TimeBasedTriggeringPolicy interval="1" modulate="true" />

                            </Policies>

                            <DefaultRolloverStrategy max="20"/>

                   </RollingRandomAccessFile>

                  

                   <RollingRandomAccessFile name="error1"

                                                                            fileName="D:/log/credit-error.log" filePattern="credit-error-%d{yyyy-MM-dd}-%i.log">

                            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS} [%p] [%t] %c{1} - %m%n"/>

                            <Policies>

                                     <TimeBasedTriggeringPolicy interval="1" modulate="true" />

                            </Policies>

                            <DefaultRolloverStrategy max="20"/>

                            <Filters>

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

              </Filters>

                   </RollingRandomAccessFile>

                  

         </Appenders>

         <Loggers>

                   <logger name="org.apache" level="INFO" />

                   <logger name="java.sql.Connection" level="INFO">

                   </logger>

                   <logger name="com.ibatis" level="INFO"></logger>

                   <logger name="java.sql.Statement" level="INFO" />

                   <logger name="java.sql.PreparedStatement" level="INFO" />

                   <logger name="com.paic.pafademo" level="INFO" />

                   <Logger name="credit" level="INFO" additivity="false"> 

            <appender-ref ref="credit"/>

        </Logger>

                   <Root level="INFO">

                       <appender-ref ref="error1"/>

                            <AppenderRef ref="logFileAsync" />

                            <AppenderRef ref= "CONSOLE"/>

                   </Root>

                   </Loggers>

</configuration>

 

private static Logger creditLogger = LoggerFactory.getLogger("credit");

creditLogger.info("sssssssssssssssssssssssssssssssssss123");

結果:

日誌打印到控制檯,可是credit只輸出到文件,不打印到控制檯(additivity="false")。

Credit-error.log只打印error級別的日誌,並打印到控制檯。

相關文章
相關標籤/搜索