SpringBoot日志文件
1. 日志有什么用
日志是程序的重要組成部分,想象一下,如果程序報錯了,不讓你打開控制臺看日志,那么你能找到報錯的原因嗎。
日志對于我們來說,最主要的用途就是排除和定位問題。除了發(fā)現(xiàn)和定位問題之外,我們還可以通過日志實現(xiàn)以下功能:
- 記錄用戶登錄日志,方便分析用戶是正常登錄,還是惡意破解用戶
- 記錄系統(tǒng)的操作日志,方便數(shù)據恢復和定位操作人
- 記錄程序的執(zhí)行時間,方便以后優(yōu)化程序提供數(shù)據支持
2. 日志怎么用
Spring Boot項目在啟動的時候默認就會有日志的輸出,如下圖:
通過上述信息我們可以發(fā)現(xiàn):
- Spring Boot內置了日志框架
- 默認情況下,輸出的日志并不是開發(fā)者定義和打印的,那么開發(fā)者怎么在程序中定義打印日志?
- 日志默認是打印在控制臺上,而控制臺的日志是不能被保存的, 如何將日志永久的保存下來?
3. 自定義日志打印
開發(fā)者自定義打印日志的實現(xiàn)步驟:
- 在程序中得到日志
- 使用日志對象的相關語法輸出要打印的內容
3.1 在程序中得到日志對象
private static final Logger log = LoggerFactory.getLogger(UserController.class);
日志工廠需要將每個類的類型傳進去,這樣我們才能知道日志的歸屬類,才能更方便更直觀的定位到問題
注意:logger對象屬于org.slf4j包下的,不要導錯了
3.2 使用日志對象打印日志
日志對象的打印方法有很多種,我們可以使用info方法來輸出日志,
@Controller
@ResponseBody
public class UserController {
private static final Logger log = LoggerFactory.getLogger(UserController.class);
@RequestMapping("/sayhi")
public void sayHi() {
log.trace("trace");
log.debug("debug");
log.info("info");
log.warn("warn");
log.error("error");
}
}
4. 日志級別
4.1 日志級別有什么用?
- 日志級別可以幫你篩選出重要的信息,比如設置日志級別為error,那么就可以只看到程序的報錯日志了,對于普通的調試日志和業(yè)務日志就可以忽略了。從而節(jié)省開發(fā)者篩選的時間
- 日志級別可以控制不同環(huán)境下,一個程序是否需要打印日志,如開發(fā)環(huán)境我們需要很詳細的信息,而生產環(huán)境為了保持性能和安全性就會輸出少量的日志,而通過日志級別可以實現(xiàn)此類需求
4.2 日志級別的分類與使用
日志級別分為:
- trace: 微量,少許的意思,級別最低
- debug:需要調試時候的關鍵信息打印
- info:普通的打印信息(默認日志級別)
- warn:警告:不影響使用,但需要注意的問題
- error:錯誤信息,級別較高的錯誤日志信息
- fatal:致命的,因為代碼異常導致程序退出執(zhí)行的事件
日志級別的順序:
越往上,接收到的信息就越少,如設置了warn就只能接收到warn及其上面的級別
日志級別設置
logging:
level:
root: error
默認日志輸出級別
清除掉配置文件當中的日志設置,觀察控制臺輸出的日志級別
得到結論,日志輸出級別默認是info
當存在局部日志級別和全局日志級別設置,那么當訪問局部日志時,使用的是局部日志級別。也就是局部日志優(yōu)先級高于全局日志的優(yōu)先級
5. 日志持久化
以上的日志都是輸出在控制臺上,然而生產環(huán)境上咱們需要將日志保存下來,以便出現(xiàn)問題之后追溯問題,把日志保存下來的過程叫做持久化
想要將日至持久化,只需要在配置文件中指定日志的存儲目錄或者是指定日志保存文件名,Spring Boot就會將控制臺的日志寫到相應的目錄或文件下
配置日志文件的保存路徑:
logging:
file:
path: D:\rizhi
保存的路徑,當中包含轉義字符方面的設置我們可以使用這個/
來作為分割符。
如果堅持使用Windows下的分割符,我們需要使用\
轉義字符來轉義一下
配置日志文件的文件名:
logging:
file:
name: D:/rizhi/logger/spring.log
6. 更簡單的日志輸出–lombok
每次使用LoggerFactory.getLogger很繁瑣,且每個類都添加一遍,也很麻煩。這里的lombok是一種更好的日志輸出方式
- 添加lombok框架支持
- 使用@slf4j注解輸出日志
6.1 添加 lombok 依賴
首先要安裝一個插件:
然后再pom.xml頁面右鍵、
最后重新添加依賴就可以了
6.2 輸出日志
使用@Slf4j注解,在程序中使用log對象即可輸入日志并且只能使用log對象才能輸出,這是lombok提供的對象名
6.3 lombok原理解釋
lombok 能夠打印?志的密碼就在 target ?錄??,target 為項?最終執(zhí)?的代碼,查看 target ?錄我們可以發(fā)現(xiàn):
這里的@Slf4j注解變成了一個對象。
下面是java程序的運行原理:
6.4 lombok更多注解說明
基本注解
注解 | 作用 |
---|---|
@Getter | 自動添加get方法 |
@Setter | 自動添加set方法 |
@ToString | 自動添加toString方法 |
@EqualsAndHashCode | 自動添加equals和hasCode方法 |
@NoArgsConstructor | 自動添加無參構造方法 |
@AllArgsConstructor | 自動添加全屬性構造方法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為null |
@RequiredArgsConstructor | 自動添加必須屬性的構造方法,final + @NonNull的屬性為需 |
組合注解:
注解 | 作用 |
---|---|
@Data | @Getter+@Setter+EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor |
日志注解
注解 | 作用 |
---|---|
@Slf4j | 添加一個名為log的對象 |
7. 總結
日志是程序員中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問題,Spring Boot提供了日志框架,默認情況下使用的是info日志級別將日志輸出到控制臺的。我們可以通過lombok提供的@Slf4j注解和log對象快速的打印自定義日志,日志包含了6個級別:文章來源:http://www.zghlxwxcb.cn/news/detail-791254.html
- trace:微量,少許的意思,級別最低
- debug:需要調試的時候的關鍵信息打印
- info:普通的打印信息
- warn:警告,不影響使用,但需要注意的問題
- error:錯誤信息,級別較高的錯誤日志信息
- fatal:致命的,因為代碼異常導致程序退出執(zhí)行的事件
日志級別依次提升,而日志級別越高,收到的日志信息也就越少,我們可以通過配置日志的保存域名或保存目錄來將日志永久的保存下來文章來源地址http://www.zghlxwxcb.cn/news/detail-791254.html
到了這里,關于【Java】Spring Boot 日志文件的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!