日誌是程式的重要組成部分,想像一下,如果程式報錯了,不讓你打開控制台看日誌,那麼你能找到報錯的原因嗎。
日誌對我們來說,最主要的用途就是排除和定位問題。除了發現與定位問題之外,我們還可以透過日誌實現以下功能:
記錄使用者登入日誌,方便分析使用者是正常登錄,還是惡意破解使用者
#記錄系統的操作日誌,方便資料復原與定位操作人
#記錄程式的執行時間,方便日後最佳化程式提供資料支援
Spring Boot專案在啟動的時候預設就會有日誌的輸出,如下圖:
透過上述資訊我們可以發現:
Spring Boot內建了日誌框架
預設情況下,輸出的日誌並不是開發者定義和列印的,那麼開發者怎麼在程式中定義列印日誌?
日誌預設是印在控制台上,而控制台的日誌是不能被儲存的, 如何將日誌永久的儲存下來?
#開發者自訂列印日誌的實作步驟:
在程式中得到日誌
使用日誌物件的相關語法輸出要列印的內容
private static final Logger log = LoggerFactory.getLogger(UserController.class);
日誌工廠需要將每個類別的類型傳進去,這樣我們才能知道日誌的歸屬類,才能更方便更直觀的定位到問題
注意:logger物件屬於org.slf4j套件下的,不要導錯了
#日誌物件的列印方法有很多種,我們可以使用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"); } }
日誌等級可以幫你篩選出重要的訊息,例如設定日誌等級為error,那麼就可以只看到程式的報錯日誌了,對於普通的偵錯日誌和業務日誌就可以忽略了。從而節省開發者篩選的時間
日誌等級可以控制不同環境下,一個程式是否需要列印日誌,如開發環境我們需要很詳細的信息,而生產環境為了保持效能和安全性就會輸出少量的日誌,而透過日誌等級可以實現此類需求
日誌等級分為:
trace: 微量,少許的意思,等級最低
#debug:需要偵錯時候的關鍵資訊列印
info:普通的列印資訊(預設日誌等級)
warn:警告:不影響使用,但需要注意的問題
#error:錯誤訊息,等級較高的錯誤日誌訊息
fatal:致命的,因為程式碼異常導致程式退出執行的事件
#日誌層級的順序:
越往上,接收到的資訊就越少,如設定了warn就只能接收到warn及其上面的層級
日誌等級設定
logging: level: root: error
預設日誌輸出等級
清除掉設定檔當中的日誌設置,觀察控制台輸出的日誌等級
得到結論,日誌輸出等級預設是info
當存在局部日誌等級和全域日誌等級設置,那麼當存取局部日誌時,使用的是局部日誌級別。也就是局部日誌優先權高於全域日誌的優先權
以上的日誌都是輸出在控制台上,然而生產環境上咱們需要將日誌保存下來,以便出現問題之後追溯問題,把日誌保存下來的過程叫做持久化
想要將日至持久化,只需要在設定檔中指定日誌的儲存目錄或指定日誌儲存檔案名,Spring Boot就會將控制台的日誌寫到對應的目錄或檔案下
設定日誌檔案的儲存路徑:
logging: file: path: D:\rizhi
儲存的路徑,其中包含轉義字符方面的設定我們可以使用這個/
來當作分割符。
如果堅持使用Windows下的分割符,我們需要使用\
轉義字元來轉義一下
配置日志文件的文件名:
logging: file: name: D:/rizhi/logger/spring.log
每次使用LoggerFactory.getLogger很繁琐,且每个类都添加一遍,也很麻烦。这里的lombok是一种更好的日志输出方式
添加lombok框架支持
使用@slf4j注解输出日志
首先要安装一个插件:
然后再pom.xml页面右键、
最后重新添加依赖就可以了
使用@Slf4j注解,在程序中使用log对象即可输入日志并且只能使用log对象才能输出,这是lombok提供的对象名
lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录我们可以发现:
这里的@Slf4j注解变成了一个对象。
下面是java程序的运行原理:
基本注解
注解 | 作用 |
---|---|
@Getter | 自动添加get方法 |
@Setter | 自动添加set方法 |
@ToString | 自动添加toString方法 |
@EqualsAndHashCode | 自动添加equals和hasCode方法 |
@NoArgsConstructor | 自动添加无参构造方法 |
@AllArgsConstructor | 自动添加全属性构造方法,顺序按照属性的定义顺序 |
@NonNull | 属性不能为null |
@RequiredArgsConstructor | 自动添加必须属性的构造方法,final + @NonNull的属性为需 |
组合注解:
注解 | 作用 |
---|---|
@Data | @Getter+@Setter+EqualsAndHashCode+@RequiredArgsConstructor+@NoArgsConstructor |
日志注解
注解 | 作用 |
---|---|
@Slf4j | 添加一个名为log的对象 |
以上是如何掌握SpringBoot日誌文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!