文章目錄
- log4j2的下載下傳位址
- log4j2在maven項目中的使用
- 比較完整的配置檔案介紹
log4j2的下載下傳位址
apache的日志元件官網:http://logging.apache.org/
log4j2下載下傳(提供的windows的下載下傳位址,其他版本或者linux的版本請到官網):http://mirrors.tuna.tsinghua.edu.cn/apache/logging/log4j/2.11.2/apache-log4j-2.11.2-bin.zip
解壓後有很多jar包,僅需兩個
log4j-api-2.11.2.jar
log4j-core-2.11.2.jar
log4j2在maven項目中的使用
- 建立maven項目 2.添加依賴(在maven倉庫搜尋和log4j2的官方文檔)
log4j2在項目中的使用log4j2的下載下傳位址log4j2在maven項目中的使用比較完整的配置檔案介紹
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
</dependencies>
- 添加配置檔案(在resources目錄下添加log4j2.xml)
這裡是簡單的配置檔案,和之前的log4j的配置檔案相比,結構更清晰一些,以下隻是一個追加器和一個根記錄器的配置。
<?xml version="1.0" encoding="utf-8" ?>
<!--
status屬性:檢視log4j的裝配過程,值為OFF表示關閉,值為debug等日志級别為檢視日志過程
-->
<configuration status="OFF">
<!--定義附加器,需要在appender标簽中定義-->
<Appenders>
<!--
name屬性:定義追加器的辨別名稱
target:定義輸出日志形式 SYSTEM_OUT/SYSTEM_ERR
-->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L %m%n"/>
</Console>
</Appenders>
<Loggers>
<!-- 定義根日志 -->
<!-- level : 指定根日志的日志輸出級别 -->
<Root level="info">
<!-- 引用日志追加器,和上面定義的追加器的名稱一樣-->
<AppenderRef ref="console"/>
</Root>
</Loggers>
</configuration>
- 運作時類
public class log4j2demo {
public static void main(String[] args) {
Logger logger = LogManager.getLogger(log4j2demo.class);
logger.fatal("this is fatal message");
logger.error("this is error message");
logger.warn("this is warn message");
logger.info("this is info message");
logger.debug("this is debug message");
logger.trace("this is trace message");
}
}
4.運作結果
配置錯誤或者不配置,按
預設的配置
輸出,類似結果如下
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console).......
10:39:49.129 [main] FATAL com.emptycloud.blog.log4j2demo - this is fatal message
10:39:49.133 [main] ERROR com.emptycloud.blog.log4j2demo - this is error message
正确
[log4j2-demo] 2019-02-15 11-22-39.810 [FATAL] com.emptycloud.blog.log4j2demo:19 this is fatal message
[log4j2-demo] 2019-02-15 11-22-39.815 [ERROR] com.emptycloud.blog.log4j2demo:20 this is error message
[log4j2-demo] 2019-02-15 11-22-39.815 [WARN ] com.emptycloud.blog.log4j2demo:21 this is warn message
[log4j2-demo] 2019-02-15 11-22-39.815 [INFO ] com.emptycloud.blog.log4j2demo:22 this is info message
比較完整的配置檔案介紹
<?xml version="1.0" encoding="utf-8" ?>
<!--
status屬性:檢視log4j的裝配過程,值為OFF表示關閉,值為debug等日志級别為檢視日志建立過程(正常情況下隻有debug和trace級别日志顯示)
monitorInterval : 配置檔案更改後重新加載,不用重新開機應用,機關秒
-->
<configuration status="warn" monitorInterval="600">
<!--全局屬性聲明,友善後面使用${屬性名稱} 進行引用-->
<properties>
<!-- /代表的是盤符根目錄, 還有諸如 .代表目前目前項目路徑 ,我們可以使用@ 名稱@從pom.xml中動态擷取這些值 -->
<property name="LOG_HOME">/log</property>
<property name="DEBUG_FILE_NAME">debug</property>
<property name="ERROR_FILE_NAME">error</property>
</properties>
<!--定義附加器,需要在appender标簽中定義-->
<Appenders>
<!--
name屬性:定義追加器的辨別名稱
target:定義輸出日志形式 SYSTEM_OUT/SYSTEM_ERR
-->
<Console name="console" target="SYSTEM_OUT">
<!--
ThresholdFilter:指定追加器過濾日志的級别
level:設定級别
onmatch:比對符合條件的日志輸出
onMismatch:拒絕不符合條件
-->
<ThresholdFilter level="warn" onmatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L %m%n"/>
</Console>
<!--
File : 檔案追加器
append :決定新産生的日志是追加還是覆寫(true為追加(預設))
FileName : 決定日志檔案的名稱和位置
-->
<File name="file" FileName="${LOG_HOME}/file.log" append="true">
<ThresholdFilter level="error" onmatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
</File>
<!--
以天/月/時為機關列印日志
filePattern指定封存日志檔案的格式
-->
<RollingFile name="rollingFile" fileName="${LOG_HOME}/rollfile.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/rollfile-%d{yyyy-MM-dd}.log">
<!--
間隔時間備份政策
modulate為true表示以0點為邊界進行時間偏移計算,
例:每隔4個小時進行日志封存,目前時間為3點,那麼1個小時後進行一次日志封存(将之前的日志放置到filePattern指定的封存位置)
interval:間隔時間(其機關有filePattern中-dd HH%d{yyyy-MM}的最小機關來決定,)
-->
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
<PatternLayout pattern="[log4j3-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
<ThresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>
</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>
<Loggers>
<!-- 定義根日志 -->
<!--
level : 指定根日志的日志輸出級别,ThresholdFilter生效其設定的日志級别輸出取決于此
例:如果跟記錄器的日志級别設定成error,那麼追加器也不會輸出error級别一下的日志
-->
<Root level="debug">
<!-- 引用日志追加器,和上面定義的追加器的名稱一樣-->
<AppenderRef ref="console"/>
<AppenderRef ref="file"/>
<AppenderRef ref="rollingFile"/>
<AppenderRef ref="sizedRollFile"/>
</Root>
<!--
Logger:定義其他記錄器,和根記錄器存在繼承關系, 一般用于設定單獨的包的日志列印級别
additivity : 設定是否繼承父記錄器的追加器
-->
<Logger name="com.emptyCloud.blog" level="debug" additivity="false">
<AppenderRef ref="console"/>
</Logger>
</Loggers>
</configuration>