(三)SpringBoot配置log4j2輸出日誌
阿新 • • 發佈:2018-12-16
SpringBoot預設是用logback日誌系統進行日誌輸出的,本教程主要說明SpringBoot如何配置使用log4j2進行日誌輸出。關於logback、log4j、log4j2 哪個好,哪個效率高這種問題,這裡不做討論。
第一步:
SpringBoot預設使用logback作為日誌輸出,要配置log4j2需先在pom.xml檔案中排除預設log的依賴,並引入SpringBoot log4j2的依賴:
pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
第二步:
在resources資料夾下建立log4j2的配置檔案log4j2-spring.xml,如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appenders> <!--這個輸出控制檯的配置--> <Console name="Console" target="SYSTEM_OUT"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch)--> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /> <!--這個都知道是輸出日誌的格式--> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /> </Console> <!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用--> <File name="log" fileName="D:/app_logs/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /> </File> <!-- 這個會打印出所有的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔--> <RollingFile name="RollingFile" fileName="D:/app_logs/boot-logging.log" filePattern="D:/app_logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n" /> <SizeBasedTriggeringPolicy size="50MB" /> </RollingFile> </appenders> <!--然後定義logger,只有定義了logger並引入的appender,appender才會生效--> <loggers> <root level="info"> <appender-ref ref="Console" /> <appender-ref ref="log" /> <appender-ref ref="RollingFile" /> </root> </loggers> </configuration>
第三步:
編寫日誌列印測試類TestController.java (怪我總寫web太多,總是喜歡用controller測試,不大愛寫單元測試)
TestController.java:
package com.lan.BootLogging.controller; //Logger建議用slf4j import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { //Logger建議用slf4j Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("test") public String test(){ log.debug("debug ****************************"); log.info("info ****************************"); log.warn("warn ****************************"); log.error("error ****************************"); return "success"; } }
重要的事情說3遍:
在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。
在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。
在程式碼中Logger建議用slf4j,不要出現log4j2、log4j、logback的蹤跡。
檢視日誌列印情況是否正確
多次啟動專案,發現test.log檔案總是會自動清除後重寫,修改append=true,重啟發現不會再自動清除。
The end.
author:藍何忠
email:[email protected]