Spring Boot 內部所有日誌記錄是使用 Commons Logging 實現,同時默認配置也提供了 Java Util Logging
、Log4J
、Log4J2
、Logback
的支援。在每種情況下,已預先配置為使用控制台輸出,同時提供檔案輸出方式。
預設情況下,如果使用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 則將左邊多出的字符直接移除 |
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 中~