創建項目
項目名稱:007-log4j2-demo
項目的pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wkcto.log4j2</groupId>
<artifactId>007-log4j2-demo</artifactId>
<version>1.0.0</version>
<dependencies>
<!--log4j2依賴-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--譯插件-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 插件的版本 -->
<version>3.5.1</version>
<!-- 編譯級別 -->
<configuration>
<source>1.8</source>
<target>1.8</target>
<!-- 編碼格式 -->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
添加log4j2的日志控制文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- status=debug 可以查看log4j的裝配過程 -->
<!--
monitorInterval="1800"指log4j2每隔1800秒(半小時),
自動監控該配置文件是否有變化,如果變化,則自動根據文件內容重新配置。
-->
<Configuration status="off" monitorInterval="1800">
<!--
定義了一些屬性(,主要是為了后面引用起來方便。
-->
<properties>
<property name="LOG_HOME">c:/logger</property>
<property name="FILE_NAME">mylog</property>
</properties>
<Appenders>
<!-- 定義控制臺輸出 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
</Console>
<!--表示以文件方式記錄-->
<RollingRandomAccessFile name="running-log"
fileName="${LOG_HOME}/${FILE_NAME}.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
<!--
fileName:生成文件的名稱
filePattern:文件格式
filePattern與28行的SizeBasedTriggeringPolicy(表示單個文件最大多少容量)結合在一起,非常有用,
以這段配置為例,當單個文件達到10M后,會自動將以前的內容,
先創建類似 2014-09(年-月)的目錄,然后按 "xxx-年-月-日-序號"命名,打成壓縮包。
-->
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
<!--策略-->
<Policies>
<!-- 每天生成一個日志文件 -->
<!--
interval:integer類型,指定兩次封存動作之間的時間間隔。
單位:以日志的命名精度來確定單位,比如yyyy-MM-dd-HH 單位為小時,yyyy-MM-dd-HH-mm 單位為分鐘
modulate:boolean型,說明是否對封存時間進行調制。
若modulate=true,則封存時間將以0點為邊界進行偏移計算。比如,modulate=true,interval=4hours,
那么假設上次封存日志的時間為03:00,則下次封存日志的時間為04:00,之后的封存時間依次為08:00,12:00,16:00
-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 每到2kb生成一個日志文件 -->
<SizeBasedTriggeringPolicy size="2 KB"/>
</Policies>
<!--
最大保存文件數:表示壓縮包,最多保留20個。
<DefaultRolloverStrategy max="20"/>,如果不做配置,默認是7,這個7指的是上面i的最大值,超過了就會覆蓋之前的
-->
<DefaultRolloverStrategy max="20"/>
</RollingRandomAccessFile>
<!-- 文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 -->
<!-- append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true -->
<File name="fileLog" fileName="${LOG_NAME}/fileLog.txt" append="false">
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
</File>
<!--按天分日志文件-->
<RollingFile name="dailyRollingFile" fileName="${LOG_HOME}/dailyRollingFile.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/dailyFile-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
<!--按大小分日志文件:每次日志大小超過size,則這個size大小的日志會自動存放到按年份-月份-天建立的文件夾下面,并進行壓縮-->
<RollingFile name="sizedRollingFile" fileName="${LOG_HOME}/sizedFile.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/sizedFile-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
<SizeBasedTriggeringPolicy size="2k" />
</RollingFile>
<!-- 這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入 -->
<!-- 按年份-月份建立的文件夾下面并進行壓縮,作為存檔 -->
<RollingFile name="RollingFile" fileName="${LOG_NAME}/app.log"
filePattern="${LOG_NAME}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L - %m%n"/>
<SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console"/>
<!--<AppenderRef ref="sizedRollingFile"/>-->
</Root>
</Loggers>
</Configuration>
編寫測試類
測試結果