1. 程式人生 > >Spring Boot (四):日誌管理

Spring Boot (四):日誌管理

預設情況下,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;
    }
}

示例圖片