一、log4j2介紹
二、log4j2安裝

pom.xml 添加log4j2所需jar包依賴
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.0</version>
</dependency>
log4j2.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!--
status屬性:查看log4j的裝配過程,值為OFF表示關閉,值為debug等日志級別為查看日志創建過程(正常情況下只有debug和trace級別日志顯示)
monitorInterval : 配置文件更改后重新加載,不用重啟應用,單位秒
-->
<configuration status="error">
<!--全局屬性聲明,方便后面使用${屬性名稱} 進行引用-->
<properties>
<!-- /代表的是盤符根目錄, 還有諸如 .代表當前當前項目路徑 ,我們也可以使用@ 名稱@從pom.xml中動態獲取這些值 -->
<property name="LOG_HOME">logs</property>
<property name="DEBUG_FILE_NAME">debug</property>
<property name="ERROR_FILE_NAME">error</property>
</properties>
<!--先定義所有的appender -->
<appenders>
<!--這個輸出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!--
控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)
ThresholdFilter:指定追加器過濾日志的級別
level:設定級別
onmatch:匹配符合條件的日志輸出
onMismatch:拒絕不符合條件
-->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 輸出日志的格式 -->
<PatternLayout pattern="[name] %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,false適合臨時測試用
append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true -->
<File name="log" fileName="${LOG_HOME}/log4j2.log" append="false">
<PatternLayout pattern="[name] %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!--<PatternLayout pattern="[log4j2_test] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L %m%n"/>-->
</File>
<!--添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕 -->
<File name="ERROR" fileName="${LOG_HOME}/error.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[name] %d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!--這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔 -->
<RollingFile name="RollingFile" fileName="${LOG_HOME}/web.log"
filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
<!--
間隔時間備份策略
modulate為true表示以0點為邊界進行時間偏移計算,
例:每隔4個小時進行日志封存,當前時間為3點,那么1個小時后進行一次日志封存(將之前的日志放置到filePattern指定的封存位置)
interval:間隔時間(其單位有filePattern中-dd HH%d{yyyy-MM}的最小單位來決定,)
-->
<TimeBasedTriggeringPolicy modulate="true" interval="12"/>
<PatternLayout pattern="[name] %d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="5MB"/>
</RollingFile>
<!--<!–-->
<!--以大小為策略進行日志封存,%i用於記錄封存文件的生成先后順序(),.zip/.gz等指定壓縮格式-->
<!--immediateFlush:log4j2接收到日志事件時,是否立即將日志刷到磁盤。默認為true。-->
<!--–>-->
<!--<RollingFile name="sizedRollFile" fileName="${LOG_HOME}/sizerollfile.log" immediateFlush="true"-->
<!--filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/sizerollfile-%d{yyyy-MM-dd HH}-%i.log.zip">-->
<!--<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L %m%n"/>-->
<!--<!– 當有多個策略時,使用Policies 標簽–>-->
<!--<Policies>-->
<!--<TimeBasedTriggeringPolicy />-->
<!--<!–基於大小的觸發策略,size指定大小–>-->
<!--<SizeBasedTriggeringPolicy size="10 kB"/>-->
<!--</Policies>-->
<!--<Filters>-->
<!--<thresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>-->
<!--</Filters>-->
<!--<!–-->
<!--控制生成的封存文件數量的一種策略,max控制filePattern 中的%i ,不指定默認為7,-->
<!--(就是你只能看見7個封存的文件,多余的你可以理解為覆蓋掉了)-->
<!--這雖然也是一種策略,但是放置在策略標簽之外-->
<!--–>-->
<!--<DefaultRolloverStrategy max="20" />-->
<!--</RollingFile>-->
</appenders>
<!--定義logger,只有定義了logger並引入的appender,appender才會生效 -->
<loggers>
<root level="trace">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
<appender-ref ref="ERROR"/>
<appender-ref ref="log"/>
</root>
</loggers>
</configuration>
log4j2測試類
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class log4j2Test {
private static final Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
public static void main(String[] args) {
for(int i=0;i<3;i++){
// 記錄trace級別的信息
logger.trace("log4j2 trace日志輸出:This is trace message.");
// 記錄debug級別的信息
logger.debug("log4j2 debug日志輸出:This is debug message.");
// 記錄info級別的信息
logger.info("log4j2 info日志輸出:This is info message.");
// 記錄warn級別的信息
logger.warn("log4j2 warn日志輸出:This is warn message.");
// 記錄error級別的信息
logger.error("log4j2 error日志輸出:This is error message.");
// 記錄fatal級別的信息
logger.fatal("log4j2 fatal日志輸出:This is fatal message.");
}
}
}
