具體配置參考官網: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>
二、各個節點解釋
-
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
<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(中立),被第一個過濾器接受的日志信息,會繼續用后面的過濾器進行過濾,只有符合所有過濾器條件的日志信息,才會被最終寫入日志文件。