POM文件
<!-- Log Begin -->
<slf4j.version>1.7.24</slf4j.version>
<log4j2.version>2.8.2</log4j2.version>
<jcl.over.version>1.7.6</jcl.over.version>
<jul.over.version>1.7.6</jul.over.version>
<log4j12.api.version>2.8.2</log4j12.api.version>
<!-- Log End -->
<!-- Logger start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency> <!-- 橋接:告訴Slf4j使用Log4j2 -->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency> <!-- 橋接:jcl,不是升級不需要 -->
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl.over.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId><!-- 橋接:jul,不是升級不需要 -->
<artifactId>jul-to-slf4j</artifactId>
<version>${jul.over.version}</version>
<scope>runtime</scope>
</dependency>
<dependency><!--適配log4j 1.x,不是升級不需要 -->
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j12.api.version}</version>
</dependency>
<!-- Logger end -->
配置文件 log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF" monitorInterval="30">
<properties>
<property name="appName">XXXXX</property>
<property name="LOG_HOME">${sys:catalina.home}/logs/XXXXX/${appName}</property>
<!--<property name="LOG_HOME">d:/test/logs/XXXXX/${appName}</property>-->
<property name="errorfilepath">${LOG_HOME}/error.log</property>
<property name="layout">%d{yyyy/MM/dd HH:mm:ss.SSS} [%t] %-5p %c{1.} %l %F - %m%n</property>
<property name="layout2">%d{yyyy/MM/dd HH:mm:ss.SSS} %-5level %c{3.} %L %M - %msg%xEx%n</property>
<property name="layout3">%d{yyyy/MM/dd HH:mm:ss.sss} %-5level %class{36} %L %M - %msg%xEx%n</property>
</properties>
<!-- 定義所有的appenders (輸出目的地) -->
<appenders>
<!-- 控制台輸出的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只輸出level級別及以上的信息(onMatch),其他的直接拒絕(onMismatch) ,設置后可屏蔽具體logger的設定-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${layout2}"/>
</Console>
<!-- 文件打印所有信息,適合臨時測試使用 ,append="true" 指定追加內容到文件 -->
<File name="log" fileName="${LOG_HOME}/test-temp.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!--fileName:當前日期文件的位置和名稱
filePattern:指定當發生rolling時,文件的轉移和重命名規則
SizeBasedTriggeringPlicy:指定文件體積大於size,出發rolling
DefaultRolloverStrategy:指定最多保存的文件數,默認每個文件夾7個
TimeBasedTriggeringPolicy:該配置需要和filePattern使用%d{yyyy-MM-dd HH-mm}-%i,最小粒度是分鍾,則單位為分鍾,表示每分鍾生成一個新文件
注意:可以通過ThresholdFilter過濾日志級別,可以實現按照不同的日志級別保存到不同的文件中
-->
<RollingFile name="RollingFile" fileName="${LOG_HOME}/app.log"
filePattern="${LOG_HOME}/app.log.%d{yyyy-MM-dd-HH}-%i.log.gz">
<!--filePattern="${errorfilepath}/$${date:yyyy-MM}/app-%d{yyyy-MM-dd HH-mm}-%i.log.gz" -->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${layout}"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
<!-- 每小時文件rollover -->
<CronTriggeringPolicy schedule="0 0 * * * ?"/>
<!--TimeBasedTriggeringPolicy表示按照時間間隔來進行日志文件的滾動,間隔單位可以是分鍾、小時,具體需要根據filePattern的格式來進行判別;-->
<!--例如filePattern="e:/app-%d{yyyy-MM-dd_HH-mm}-%i.out",則表示mm(分鍾)為單位;-->
<!--<TimeBasedTriggeringPolicy interval="1" modulate="true"/>-->
</Policies>
<!-- DefaultRolloverStrategy屬性如不設置,則默認為最多同一文件夾下7個文件,這里設置了20 -->
<DefaultRolloverStrategy max="20">
<!-- 刪除策略,basePath表示根文件夾,maxDepth表示路徑深度,0表示根目錄自身,默認1,僅僅根目錄下的文件可訪問,刪除無法恢復請慎重-->
<Delete basePath="${LOG_HOME}" maxDepth="0">
<IfFileName glob="app.log*.log.gz"/>
<!-- 刪除30天前的數據-->
<ifLastModified age="30d"/>
<!-- 訪問文件數,保留最新10個文件 exceeds表示刪除的文件數量閾值-->
<IfAccumulatedFileCount exceeds="10"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</appenders>
<loggers>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFile"/>
</root>
<logger name="org.springframework" level="ERROR" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<logger name="com.baomidou.mybatisplus" level="INFO" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<logger name="log4j.logger.com.ibatis" level="DEBUG" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<logger name="com.XXXXX" level="DEBUG" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<logger name="com.XXXXX.XXXXXX" level="DEBUG" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<logger name="com.XXXXX.XXXXX.XXXXX" level="DEBUG" additivity="false" >
<appender-ref ref="Console"/>
</logger>
<!--additivity=false 表示不往上繼承root,因此沒有打印root策略的日志-->
<!--<logger name="org.springframework.core" level="INFO" additivity="false">-->
<!--<appender-ref ref="Console"/>-->
<!--</logger>-->
</loggers>
</configuration>