1言沐、剔除springboot自帶日志配置闸英、引入log4j2的日志配置
<dependency>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>
<exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions>
</dependency><!-- 引入log4j2依賴 -->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId></dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version></dependency>
2糊识、yml配置
# 應(yīng)用名稱
spring:
application:
name: log
# 應(yīng)用服務(wù) WEB 訪問端口
server:
port:8080
# 指定讀取日志配置
logging:
config: classpath:log4j2.xml
3、在resource目錄新建log4j2.xml文件,指定日志路徑、日志層級等配置
<?xml version="1.0" encoding="UTF-8"?>
Configuration后面的status如庭,這個用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置撼港,
當(dāng)設(shè)置成trace時坪它,可以看到log4j2內(nèi)部各種詳細(xì)輸出
-->
<!--monitorInterval:Log4j能夠自動檢測修改配置 文件和重新配置本身骤竹,設(shè)置間隔秒數(shù)-->
<configuration monitorInterval="5">
? ? <!--日志級別以及優(yōu)先級排序:
OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL
-->
? ? <!--變量配置-->
? ?
? ? ? ? ? ? 格式化輸出:? ? ? ? ? ? %d表示日期,? ? ? ? ? ? %thread表示線程名往毡,? ? ? ? ? ? %-5level:級別從左顯示5個字符寬度? ? ? ? ? ? %msg:日志消息瘤载,%n是換行符
? ? ? ? -->
? ? ? ? %logger{36} 表示 Logger 名字最長36個字符
? ? ? ? -->
? ? ? ? <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level}[%thread] %style{%logger{36}}{cyan} : %msg%n" />
? ? ? ? <!-- 定義日志存儲的路徑,不要配置相對路徑 -->
? ? ? ? <property name="FILE_PATH" value="/data/log" />
? ? ? ? <property name="FILE_NAME" value="log" />
? ? ? ? <console name="Console" target="SYSTEM_OUT">
? ? ? ? ? ? <!--輸出日志的格式-->
? ? ? ? ? ? <PatternLayout pattern="${LOG_PATTERN}" disableAnsi="false" noConsoleNoAnsi="false"/>
? ? ? ? ? ? <!--控制臺只輸出level及其以上級別的信息(onMatch)卖擅,其他的直接拒絕(onMismatch)-->
? ? ? ? ? ? <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
? ? ? ? <!--文件會打印出所有信息,這個log每次運(yùn)行程序會自動清空墨技,由append屬性決定惩阶,適合臨時測試用-->
? ? ? ? <File name="FileLog" fileName="${FILE_PATH}/test.log" append="false">
? ? ? ? ? ? <PatternLayout pattern="${LOG_PATTERN}"/>
? ? ? ? 這個會打印出所有的info及以下級別的信息,每次大小超過size扣汪,
? ? ? ? 則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮断楷,
作為存檔
? ? ? ? -->
? ? ? ? <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
? ? ? ? ? ? <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
? ? ? ? ? ? <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
? ? ? ? ? ? <PatternLayout pattern="${LOG_PATTERN}"/>
? ? ? ? ? ? ? ? <!--interval屬性用來指定多久滾動一次崭别,默認(rèn)是1 hour-->
? ? ? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>
? ? ? ? ? ? ? ? <SizeBasedTriggeringPolicy size="20MB"/>
? ? ? ? ? ? <!-- DefaultRolloverStrategy屬性如不設(shè)置冬筒,則默認(rèn)為最多同一文件夾下7個文件開始覆蓋-->
? ? ? ? ? ? <DefaultRolloverStrategy max="15"/>
? ? ? ? <!-- 這個會打印出所有的warn及以下級別的信息,每次大小超過size茅主,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮舞痰,作為存檔-->
? ? ? ? <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
? ? ? ? ? ? <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
? ? ? ? ? ? <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
? ? ? ? ? ? <PatternLayout pattern="${LOG_PATTERN}"/>
? ? ? ? ? ? ? ? <!--interval屬性用來指定多久滾動一次诀姚,默認(rèn)是1 hour-->
? ? ? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>
? ? ? ? ? ? ? ? <SizeBasedTriggeringPolicy size="20MB"/>
? ? ? ? ? ? <!-- DefaultRolloverStrategy屬性如不設(shè)置响牛,則默認(rèn)為最多同一文件夾下7個文件開始覆蓋-->
? ? ? ? ? ? <DefaultRolloverStrategy max="15"/>
? ? ? ? <!-- 這個會打印出所有的error及以下級別的信息,每次大小超過size赫段,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮呀打,作為存檔-->
? ? ? ? <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
? ? ? ? ? ? <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
? ? ? ? ? ? <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
? ? ? ? ? ? <PatternLayout pattern="${LOG_PATTERN}"/>
? ? ? ? ? ? ? ? <!--interval屬性用來指定多久滾動一次糯笙,默認(rèn)是1 hour-->
? ? ? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>
? ? ? ? ? ? ? ? <SizeBasedTriggeringPolicy size="20MB"/>
? ? ? ? ? ? <!-- DefaultRolloverStrategy屬性如不設(shè)置贬丛,則默認(rèn)為最多同一文件夾下7個文件開始覆蓋-->
? ? ? ? ? ? <DefaultRolloverStrategy max="15"/>
? ? <!--Logger節(jié)點(diǎn)用來單獨(dú)指定日志的形式,比如要為指定包下的class指定不同的日志級別等给涕。-->
? ? <!--然后定義loggers豺憔,只有定義了logger并引入的appender,appender才會生效-->
? ?
? ? ? ? <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
? ? ? ? <logger name="org.mybatis" level="info" additivity="false">
? ? ? ? ? ? <AppenderRef ref="Console"/>
? ? ? ? <!--監(jiān)控系統(tǒng)信息-->
? ? ? ? <!--若是additivity設(shè)為false稠炬,則 子Logger 只會在自己的appender里輸出焕阿,而不會在 父Logger 的appender里輸出。-->
? ? ? ? <Logger name="org.springframework" level="info" additivity="false">
? ? ? ? ? ? <AppenderRef ref="Console"/>
? ? ? ? <root level="info">
? ? ? ? ? ? <appender-ref ref="Console"/>
? ? ? ? ? ? <appender-ref ref="FileLog"/>
? ? ? ? ? ? <appender-ref ref="RollingFileInfo"/>
? ? ? ? ? ? <appender-ref ref="RollingFileWarn"/>
? ? ? ? ? ? <appender-ref ref="RollingFileError"/>
</configuration>
4首启、編寫代碼測試
@RestController
@RequestMapping("/testCtrl")
@Log4j2
public class TestController {
@GetMapping("/info")
public void info(){
log.info("info");
? ? }
@GetMapping("/debug")
public void debug(){
log.debug("debug");
? ? }
@GetMapping("/warn")
public void warn(){
log.warn("warn");
? ? }
@GetMapping("/error")
public void error(){
log.error("error");
? ? }
}
5暮屡、效果截圖