iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Software Development

一個新鮮人如何完轉Spring boot與DevOps從0到101系列 第 14

談談 Log 的定義以及使用 - part1

Spring Boot 內部所有日誌記錄是使用 Commons Logging 實現,同時默認配置也提供了 Java Util LoggingLog4JLog4J2Logback 的支援。在每種情況下,已預先配置為使用控制台輸出,同時提供檔案輸出方式。

預設情況下,如果使用Starters,則使用 Logback 進行日誌記錄。

日誌格式

日誌格式

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

{Date and Time} {Log Level} {Process ID} {---} {Thread name} {Logger name} { log message}

--- 表示日誌的開始

Logback does not have a FATAL level. It is mapped to ERROR.

%logger{length} 表示如果訊息長度大於給定的 length 的值,保留最右邊的單詞,左邊的每個單詞只保留第一個字符。

日誌訊息對齊與控制

模式 描述
%50logger 靠右對齊,最小寬度為 50,若不足 50 則左補空格,長度超出 50 則原樣輸出
%-50logger - 表示向左對齊
%.20logger 靠左對齊,最大的寬度為 20,若長度超出 20,將左邊多出的字符直接移除
%30.50logger 最小寬度為 30,若長度不足 30 則左補空格靠右對齊;若長度大於 30 且不足 50 則靠左對齊;若長度大於 50 則將左邊多出的字符直接移除

日誌級別

  • Trace
  • DEBUG
    • 開發階段使用,驗證功能是否正確
  • INFO
    • 開發階段使用,驗證開發功能或 bug 是否修正
  • WARING
    • 部會對系統造成影響的非正常流程
  • ERROR
    • 對系統造成影響的非正常流程,可自我修復,不影響系統穩定性
  • CRITICAL
    • 產生不可逆的錯誤,使得系統無法正常工作
  • OFF

application.properties 配置示例:

logging.level.root = WARN
logging.level.org.hibernate.SQL = DEBUG

如果以 logging.level.*可以是根級別(root)也可以是 package 級別。

檔案輸出

logging.file = logs/logfile.log
logging.path = logs # 指定日誌檔案輸出的目錄

透過 logging.pattern.console 可以指定日誌輸出的格式,設置如下:

logging.pattern.console="%date{yyyy-MM-dd HH:mm:ss} -%5level [%15.15thread] %-40.40logger{39} : %msg%n"

日誌參數

參數 描述
%logger 所在 Class 的全名
%date 定義日誌輸出的時間格式
%msg 錯誤的訊息
%level 日誌等級
%thread 產生日誌的執行續名稱
%n 換行

範例

這邊利用了 lombok 中的 @Log4j2 註解進行 Log 設置

    @GetMapping("/showNewEmployeeForm")
    public String showNewEmployeeForm(Model model) {
        Employee employee = new Employee();
        model.addAttribute("employee", employee);
        log.info("[showNewEmployeeForm] employee: {}", employee); # 可以像這樣的使用,`{}` 對應 employee 參數
        return "new_employee";
    }

一天一篇,用力地擠出我的內容,下班後要來一篇文章真的好累QQ
明天會來個 Logback 配置,定義 log 輸出訊息,以及之後如何整合至 EFK 中~


上一篇
mybatis 使用
下一篇
Logback 配置來客製化 Log 訊息吧
系列文
一個新鮮人如何完轉Spring boot與DevOps從0到10130

尚未有邦友留言

立即登入留言