在開發及維護專案時,善用日誌將有助於提升除錯及維護效率。此篇介紹在Spring Boot當中要如何使用日誌進行記錄與管理。
Spring Boot預設是以Logback作為日誌框架,透過SLF4J(Simple Logging Facade for Java)的API紀錄日誌。
Spring Boot當中的application.properties(或application.yml)可以配置日誌等級。當有過多的日誌產生,會增加系統負擔,反而使日誌更難閱讀,因此,依據需求顯示日誌級別是非常重要的。
常見的日誌等級依據嚴重性由低到高依序是:TRACE→DEBUG→INFO→WARN→ERROR。
針對不同問題也能配給不同的等級,當發生錯誤時更能快速定位問題。
# application.properties
logging.level.com.example=DEBUG
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LogController {
private static final Logger logger = LoggerFactory.getLogger(LogController.class);
@GetMapping("/log")
public String log() {
logger.info("This is an info");
logger.debug("This is a debug");
logger.error("This is an error");
return "logs for messages!";
}
}
Spring Boot預設是將日誌輸出在控制台顯示,但一般來說,在專案開發時,會將日誌記錄成文件,便於查閱。透過下列配置,可設定日誌輸出的格式以及儲存路徑,也可以針對需求設定不同的log紀錄級別,甚至是日誌檔案大小都能切分設定:
# 指定日誌輸出的文件名稱
logging.file.name=logs/spring-boot-log.log
# 日誌格式:加入時間戳、日誌等級及內容
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
# 只對某個package設置日誌等級
logging.level.com.example.service=DEBUG
logging.level.org.springframework.web=INFO
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/spring-boot-log.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日誌文件每天進行輪替 -->
<fileNamePattern>logs/spring-boot-log-%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留最近30天的日誌 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
透過日誌管理,可以有效追蹤程式執行狀況,並快速掌握問題除錯。在Spring Boot當中可以輕鬆處理日誌設置,更加靈活實現日誌管理應用。