Spring Boot (四):日誌管理
阿新 • • 發佈:2019-01-10
預設情況下,Spring Boot會用Logback來記錄日誌,並用INFO級別輸出到控制檯。在執行應用程式和其他例子時,你應該已經看到很多INFO級別的日誌了。
1、新增依賴
maven依賴中添加了spring-boot-starter-logging:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
但是呢,實際開發中我們不需要直接新增該依賴,你會發現spring-boot-starter其中包含了 spring-boot-starter-logging,該依賴內容就是 Spring Boot 預設的日誌框架 logback。如果工程中有用到了Thymeleaf,而Thymeleaf依賴包含了spring-boot-starter,最終我只要引入Thymeleaf即可。
2、把日誌寫入檔案
第一種方法:在application.properties 新增 logging.file=”檔案路徑” 或者 logging.path=”檔案路徑” 的屬性
第二種方法:自定義logback.xml 檔案
Spring Boot官方推薦優先使用帶有-spring的檔名作為你的日誌配置(如使用logback-spring.xml,而不是logback.xml),命名為logback- spring.xml的日誌配置檔案,spring boot可以為它新增一些spring boot特有的配置項,如下圖。
3、我的logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制檯列印日誌的相關配置 -->
<appender name ="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日誌格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n</pattern>
</encoder>
<!-- 日誌級別過濾器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>INFO</level>
<!-- 匹配時的操作:接收 (記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕DENY(不記錄)接受:ACCEPT(記錄) -->
<onMismatch>ACCEPT</onMismatch>
</filter>
</appender>
<!-- 檔案儲存日誌的相關配置 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 儲存日誌檔案的路徑 -->
<file>e:/logs/info.log</file>
<!--
<file>/var/logs/info.log</file>
-->
<!-- 日誌格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
<!-- 日誌級別過濾器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>INFO</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 迴圈政策:基於時間建立日誌檔案 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日誌檔名格式 -->
<fileNamePattern>info.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最大儲存時間:30天-->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 儲存日誌檔案的路徑 -->
<file>e:/logs/error.log</file>
<!--
<file>/var/logs/error.log</file>
-->
<!-- 日誌格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n</pattern>
</encoder>
<!-- 日誌級別過濾器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 過濾的級別 -->
<level>ERROR</level>
<!-- 匹配時的操作:接收(記錄) -->
<onMatch>ACCEPT</onMatch>
<!-- 不匹配時的操作:拒絕(不記錄) -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 迴圈政策:基於時間建立日誌檔案 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日誌檔名格式 -->
<fileNamePattern>error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 最大儲存時間:30天-->
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<!-- 基於dubug處理日誌:具體控制檯或者檔案對日誌級別的處理還要看所在appender配置的filter,如果沒有配置filter,則使用root配置 -->
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="file" />
<appender-ref ref="error" />
</root>
</configuration>
4、java 程式碼呼叫示例
package top.lrshuai.helloword.controller;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.lrshuai.helloword.entity.User;
import top.lrshuai.helloword.mapper.UserMapper;
@RestController
public class UserController {
// private Logger log = LoggerFactory.getLogger(this.getClass());
private final Logger log = Logger.getLogger(this.getClass());
@Autowired
private UserMapper userMapper;
@RequestMapping("/getAll")
public Object getAllList(){
List<User> ulist = userMapper.getAll();
log.info("......");
log.info("......");
log.info("......");
log.info("......");
log.info("......");
log.info("......");
log.info("......");
log.info("......");
log.warn("warn....................");
log.error("error....................");
log.debug("debug....................");
System.out.println("ulist="+ulist);
return ulist;
}
}