日誌紀錄是網站的一個非常重要的功能,不論是對外的使用者或是對內的管理,實際運營上一定都會遇到許許多多的問題,問題發生時我們會去查閱紀錄並尋找問題,但當我們的紀錄都是由伺服器預設的處理方式,想要查閱紀錄就宛如大海撈針,所以建置自己的日誌紀錄就是一個很好的解決方法。
Spring Boot 已經有默認配置了Java Util Loggin、Log4J、Log4J2、Logback 以及SLF4J 等,而本篇使用的是SLF4J。
SLF4J (Simple Loggin Facade For Java),作為一個日誌紀錄的框架,定義了統一的抽象介面,它的作者也是Log4J 的作者,他宣稱SLF4J 比Log4J 更有效率,而且比JCL (Apache Commons Logging) 簡單、穩定。
在傳統的Log4J 中,日誌等級分為六個,根據等級高低依序為TRACE、DEBUG、INFO、WARN、ERROR、FATAL 六個等級,FATAL 為最高等級,而SLF4J 認為ERROR 與FATAL 並沒有實質上的差別所以拿掉了。
# 指定Log 檔案位置,不指定路徑則預設在當前專案下生成檔案
logging.file.path=/home/kaijun/Documents/iThomeIronManLog
# 設定Log 檔案名稱,預設為spring.log,使用該配置會覆蓋path 位置,直接在當前專案下生成檔案
logging.file.name=iThomeIronManLog.log
# 在控制檯輸出的日誌的格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定檔案中日誌輸出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n
# 指定自定義 logger 物件日誌級別
logging.level.com.codewhite=trace
package com.example.iThomeIronMan.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.iThomeIronMan.model.Member;
import com.example.iThomeIronMan.model.MemberAccount;
import com.example.iThomeIronMan.service.MemberAccountService;
@Controller
public class LoginRegisterController {
@Autowired
private MemberAccountService memberAccountService;
private static final Logger logger = LoggerFactory.getLogger(LoginRegisterController.class)
@RequestMapping(value = "/login", method = {RequestMethod.POST})
public String doLogin(
@ModelAttribute MemberAccount memberAccount,
Model model) {
Member result = memberAccountService.login(memberAccount);
if(result == null) {
logger.warn(memberAccount.getAccount() + "嘗試登入系統");
return "redirect:login";
}
logger.info(result.getName() + "登入系統");
return "redirect:information";
}
// 以下忽略
}
SLF4J - 维基百科,自由的百科全书
SpringBoot從零入門4_日誌記錄及其配置詳解