log4j2很久以前就用過了,每次只是奉行「拿來主義」,對於其知識點沒有一個系統的瞭解,粗略的看了看官方文檔,整理了一下幾個關鍵的知識點。java
log4j-core-xx.jar程序員
log4j-api-xx.jarspring
Log4j將檢查「log4j.configurationFile」系統屬性,若是設置,將嘗試使用與文件擴展名匹配的ConfigurationFactory加載配置。數據庫
若是未設置系統屬性,則ConfigurationFactory屬性將在classpath中查找log4j2-test.properties。編程
若是沒有找到這樣的文件,YAML ConfigurationFactory將在classpath中查找log4j2-test.yaml或log4j2-test.yml。json
若是沒有找到這樣的文件,JSON ConfigurationFactory將在classpath中查找log4j2-test.json或log4j2-test.jsn。api
若是找不到這樣的文件,XML ConfigurationFactory將在classpath中查找log4j2-test.xml。app
若是找不到測試文件,ConfigurationFactory屬性將在classpath上查找log4j2.properties。dom
若是找不到屬性文件,YAML ConfigurationFactory將在classpath上查找log4j2.yaml或log4j2.yml。測試
若是找不到YAML文件,JSON ConfigurationFactory將在classpath上查找log4j2.json或log4j2.jsn。
若是找不到JSON文件,XML ConfigurationFactory將嘗試在classpath上找到log4j2.xml(經常使用的配置)。
若是找不到配置文件,則將使用DefaultConfiguration。這將致使日誌記錄輸出轉到控制檯。
trace: 字面含義追蹤,能夠查看程序的一步步推動調用,分析源碼時,能夠放開,通常不用。
debug: 調試開發時使用。
info: 通常一些須要後臺監控的信息。
warn: 有些信息不是錯誤信息,可是也要給程序員的一些提示。
error: 錯誤信息。。
fatal: 級別比較高了。重大錯誤。
當日志級別設置爲某個值的時候,低於它的日誌信息將不會被輸出到appender中,只有高於設置的級別的信息會被輸出到appender中
Logger logger = LogManager.getLogger(xx.class().getName());
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <!-- 定義日誌輸出目錄 --> <properties> <property name="LOG_HOME">${sys:catalina.base}/logs</property> <property name="LOG_FILE_NAME">manager</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <!-- 控制檯只輸出該level以上級別日誌 onMatch符合條件 onMismatch不合符條件--> <!--<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>--> <!-- 定義日誌輸出格式 --> <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/> </Console> <!-- name 聲明名稱 fileName 當前日誌名稱 --> <RollingRandomAccessFile name="fileLog" fileName="${LOG_HOME}/${LOG_FILE_NAME}.log" filePattern="${LOG_HOME}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log"> <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingRandomAccessFile> </Appenders> <Loggers> <!--<!– 聲明這些包輸出的日誌級別–> <logger name="org.springframework" level="trace"> <AppenderRef ref="Console"/> </logger>--> <!-- 數據庫操做單獨處理 級別trace 再fileLog輸出 additivity 解決重複輸出--> <logger name="com.test.mapper" level="debug" additivity="false"> <AppenderRef ref="Console"/> </logger> <Root level="info"> <!-- 控制檯--> <AppenderRef ref="Console"/> <!-- 日誌目錄 --> <AppenderRef ref="fileLog"/> </Root> </Loggers> </Configuration>
標籤訂義日誌輸出位置的信息,內部能夠定義多種標籤如<Console><RollingRandomAccessFile>等來設定不一樣的輸入位置。幾個經常使用的appender標籤:
ConsoleAppender: 將日誌輸出寫入System.out或System.err,默認寫入System.out
FileAppender、 RollingFileAppender、RandomAccessFileAppender、 RollingRandomAccessFileAppender :將日誌寫入文件中,
JDBCAppender和JPAAppender:寫入關係型數據庫中
NoSQLAppender:使用內部輕量級提供程序接口將日誌事件寫入NoSQL數據庫。
SMTPAppender: 發生特定日誌記錄事件時發送電子郵件,一般是錯誤或致命錯誤
定義了一些必要的logger,logger表明用於輸出日誌信息的具體對象
<root>標籤:root標籤設置了一個默認的配置,當輸出對象沒有匹配的logger對象是,默認採用root配置
具體的<Logger>標籤在默認狀況下會繼承<root>的全部配置,固然也能夠自定義本身的配置,用於設定不一樣輸出對象
決定日誌事件可否被輸出。過濾條件有三個值:ACCEPT(接受), DENY(拒絕) or NEUTRAL(中立).
log4j2規定了四個位置能夠設置filter:
上下文範圍的過濾器直接在配置,即Configuration根目錄下
Logger標籤下
在一個appender元素。 這些過濾器能夠防止或致使事件由追加器處理。
在追加器引用元素中。 這些過濾器用於肯定記錄器是否應將事件路由到追加器。
比較經常使用的Filter:ThresholdFilter