springboot日誌按級別按天並且按大小切割
阿新 • • 發佈:2021-01-06
技術標籤:軟知識springboot日誌分級springboot日誌分目錄springboot日誌按天springboot日誌按大小log4j2
一、簡介
為了方便查詢問題,將日誌按info、error級別等輸出到日誌檔案。
若是用一個檔案來儲存所有的日誌,那麼這個檔案會越來越大,不利於我們查詢日誌。
所以這裡我們將日誌按日期儲存,每天都會建立一個對應日期的資料夾來存放當天的日誌檔案。
並且為了不讓日誌檔案太大,影響我們查詢,因此在日期資料夾中還需要按大小來切割成多個日誌檔案存放。
使用的是SpringBoot+log4j2。
將springboot專案打包成jar包執行,日誌的配置依然有效。使用java -jar demo.jar執行jar包,日誌會輸出到設定的目錄中。
二、實踐
1.建立springboot專案,pom檔案如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <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> <version>1.5.6.RELEASE</version> </dependency> <!-- 支援識別yml配置 --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.在resources資料夾下建立log4j2.yml檔案,內容如下:
Appenders: Console: #輸出到控制檯 name: CONSOLE #Appender命名 target: SYSTEM_OUT PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" #輸出日誌的格式 RollingFile: # 輸出到檔案 - name: RollingFileInfo #複數加上- info級別的日誌設定 ignoreExceptions: false #是否忽略異常 fileName: D://logs/info.log #日誌地址 filePattern: "D://logs/info/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log" #日誌超過設定的限制大小則另外新建檔案 PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" #輸出日誌格式 Policies: SizeBasedTriggeringPolicy: size: "3 KB" #限制日誌檔案大小為3kb,超出3kb則另外建立日誌檔案,可以根據實際修改這個大小 DefaultRolloverStrategy: max: 1000 #同一資料夾1000個檔案開始覆蓋,不設定的話預設7個檔案開始覆蓋 ThresholdFilter: level: "info" #日誌級別 onMatch: "ACCEPT" #info及以上級別則列印 onMismatch: "DENY" #info以下級別不列印 - name: RollingFileError #複數加上- error級別的日誌設定,同info類似 ignoreExceptions: false fileName: D://logs/error.log filePattern: "D://logs/error/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log" PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" Policies: SizeBasedTriggeringPolicy: size: "3 KB" DefaultRolloverStrategy: max: 1000 ThresholdFilter: level: "error" onMatch: "ACCEPT" onMismatch: "DENY" Loggers: Root: level: info #日誌級別 AppenderRef: - ref: CONSOLE #複數加上- - ref: RollingFileInfo - ref: RollingFileError Logger: #單獨設定某些包的輸出級別 - name: com.example.demo #複數加上-(這裡我設定的是包的根路徑的包名) additivity: false #去除重複的log level: info AppenderRef: - ref: CONSOLE #複數加上- - ref: RollingFileInfo #複數加上- - ref: RollingFileError #複數加上-
這裡我是在window系統執行的,所以日誌檔案目錄是window格式的,若是在linux系統的話,改成對應的路徑格式就行了。
這裡我輸出了info及以上級別的日誌檔案和單獨error級別的日誌檔案。
3.建立controller檔案,方便呼叫來輸出日誌
package com.example.demo.controller;
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 logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/test")
public String test(){
logger.info("test success");
logger.error("test error");
return "success";
}
}
這樣就可以開始測試了。
三、測試
1.啟動專案,檢視日誌目錄
可以看到自動生成了日誌目錄和檔案
2.呼叫介面列印日誌
之後檢視日誌檔案,可以看到輸出了對應的日誌。
3.多次呼叫介面列印日誌
多次列印日誌後,當日志文件超過3kb時,將開始建立資料夾來存放對應的日誌,並且按大小分割成多個日誌檔案儲存。