5-log4j2.xml配置文件各個節點詳解


 

具體配置參考官網:http://logging.apache.org/log4j/2.x/manual/configuration.html

 

一、log.xml文件的大致結構

 

<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <Properties>
    <Property name="name1">value</property>
    <Property name="name2" value="value2"/>
  </Properties>
  <filter  ... />
  <Appenders>
    <appender ... >
      <filter  ... />
    </appender>
    ...
  </Appenders>
  <Loggers>
    <Logger name="name1">
      <filter  ... />
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

 

二、各個節點解釋

Configuration: 根節點
 
屬性包含:
    status :有效值包含“trace”、“debug”、“info”、“warn”、“error” 和“fatal”,用於控制日志框架本身的日志級別
    monitorInterval: 含義是每隔多少秒重新讀取配置文件,可以在不重啟應用的情況下修改配置文件
 
Appenders: 輸出源,用於定義日志輸出的節點
 
    目前支持的輸出源包括控制台Console、文件File、按照日期切割文件RollingRandomAccessFile、mongoDB、Flume、Kafka等
  • Console:控制台輸出源是將日志打印到控制台上,開發的時候一般都會配置,以便調試

  • File:文件輸出源,用於將日志寫入到指定的文件,需要配置輸入到哪個位置(例如:D:/logs/mylog.log)

  • RollingRandomAccessFile: 該輸出源也是寫入到文件,不同的是比File更加強大,可以指定當文件達到一定大小(如20MB)時,另起一個文件繼續寫入日志,另起一個文件就涉及到新文件的名字命名規則,因此需要配置文件命名規則 
    這種方式更加實用,因為你不可能一直往一個文件中寫,如果一直寫,文件過大,打開就會卡死,也不便於查找日志。

    • fileName 指定當前日志文件的位置和文件名稱
    • filePattern 指定當發生Rolling時,文件的轉移和重命名規則
    • SizeBasedTriggeringPolicy 指定當文件體積大於size指定的值時,觸發Rolling
    • DefaultRolloverStrategy 指定最多保存的文件個數
    • TimeBasedTriggeringPolicy 這個配置需要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的時間粒度是mm,即分鍾
    • TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1分鍾生成一個新文件。如果改成%d{yyyy-MM-dd HH},最小粒度為小時,則每一個小時生成一個文件 
  • NoSql:MongoDb, 輸出到MongDb數據庫中

  • Flume:輸出到Apache Flume(Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各種數據接受方(可定制)的能力。)

  • Async:異步,需要通過AppenderRef來指定要對哪種輸出源進行異步(一般用於配置RollingRandomAccessFile)

PatternLayout:控制台或文件輸出源(Console、File、RollingRandomAccessFile)都必須包含一個PatternLayout節點,用於指定輸出文件的格式(如 日志輸出的時間 文件 方法 行數 等格式),例如 pattern=”%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n”

 

# PatternLayout包含的所有有效的格式
%c 輸出logger名稱
%C 輸出類名
%d{HH:mm:ss.SSS} 表示輸出到毫秒的時間
%t 輸出當前線程名稱
%-5level 輸出日志級別,-5表示左對齊並且固定輸出5個字符,如果不足在右邊補0
%logger 輸出logger名稱,因為Root Logger沒有名稱,所以沒有輸出
%msg 日志文本
%n 換行

其他常用的占位符有:
%F 輸出所在的類文件名,如Log4j2Test.java
%L 輸出行號
%M或%method 輸出所在方法名
%l 輸出完整的錯誤位置, 包括類名、方法名、文件名、行數
%p 該條日志的優先級
%replace{pattern}{regex}{substitution} 將pattern的輸出結果pattern按照正則表達式regex替換成substitution

 

Loggers:日志器 
 
日志器分根日志器Root和自定義日志器,當根據日志名字獲取不到指定的日志器時就使用Root作為默認的日志器,自定義時需要指定每個Logger的名稱name(對於命名可以以包名作為日志的名字,不同的包配置不同的級別等),日志級別level,相加性additivity(是否繼承下面配置的日志器), 對於一般的日志器(如Console、File、RollingRandomAccessFile)一般需要配置一個或多個輸出源AppenderRef;
 
每個logger可以指定一個level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF),不指定時level默認為ERROR 
 
additivity指定是否同時輸出log到父類的appender,缺省為true。
 
properties:屬性 
 
使用來定義常量,以便在其他配置的時候引用,該配置是可選的
 
Filters: 組合過濾器

 

 

<Filters>  
    <ThresholdFilter level="TRACE" onMatch="NEUTRAL" onMismatch="DENY"/>  
    <RegexFilter regex=".* test .*" onMatch="NEUTRAL" onMismatch="DENY"/>  
           <TimeFilter start="05:00:00" end="05:30:00" onMatch=" NEUTRAL " onMismatch="DENY"/>          
</Filters>  

 

 

<Filters>是組合過濾器額標簽,子節點包含ThresholdFilter - 日志等級過濾器RegexFilter正則表達式過濾器TimeFilter - 時間過濾器

onMatch和onMismatch可以選擇的值及其含義。可選的值分別是,ACCEPT, DENY, NEUTRAL,ACCEP和DENY比較好理解就是接受和拒絕的意思,在使用單個過濾器的時候,一般就是使用這兩個值。但是在組合過濾器中,如果用接受ACCEPT的話,日志信息就會直接寫入日志文件,后續的過濾器不再進行過濾。所以,在組合過濾器中,接受使用NEUTRAL(中立),被第一個過濾器接受的日志信息,會繼續用后面的過濾器進行過濾,只有符合所有過濾器條件的日志信息,才會被最終寫入日志文件。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM