-
日志信息的組成:
- 時間
- 日志級別
- 調用鏈標識(可選,分布式應用中traceId+spanId)
- 線程名稱
- 日志記錄器名稱
- 日志內容
- 異常堆棧
-
日志級別
日志級別主要有Debug、Info、Warn、Error。
(1)DEBUG:主要輸出調試性質的內容,用于開發(fā)、測試階段,給出詳細的提示信息;
(2)INFO:提示性信息,用于生產(chǎn)環(huán)境,常見的有:- 啟動信息,主要是一些重要的配置參數(shù)
- 一些重要的依賴注入的類名
- 方法中重要的部分,如SQL、以及一些重要的入?yún)⒌鹊?/li>
(3)WARN:警告性質的信息。
(4)ERROR :錯誤、異常,對程序影響不大的用WARN,影響大的用ERROR。 -
日志文件命名
日志文件放置于固定的目錄中,按照一定的模板進行命名,推薦的日志文件名稱:- 當前正在寫入的日志文件名:<應用名>[-<功能名>].log
- 已經(jīng)滾入歷史的日志文件名:<應用名>[-<功能名>].log.<yyyy-MM-dd>
信息安全
在打印日志的時候,要避免敏感信息的泄漏,如:姓名、密碼、身份證、電話、秘鑰、郵箱、地址、銀行卡等;可以采用“***”對部分信息進行遮蓋。-
日志配置
Logger框架的三大部分:Logger用于收集日志,Layout用于格式化日志,Appender用于控制日志的輸出。其中Appender是我們經(jīng)常要使用的部分:- 本地調試可以將日志輸出到控制臺上
- 測試環(huán)境或者生產(chǎn)環(huán)境輸出到文件中,每天產(chǎn)生一個文件,如果日志量龐大可以每個小時產(chǎn)生一個日志文件
- 生產(chǎn)環(huán)境中的文件輸出,可以考慮使用異步文件輸出,該種方式日志并不會馬上刷新到文件中去,會產(chǎn)生日志延時,在停止應用時可能會導致一些還在內存中的日志未能及時刷新到文件中去而產(chǎn)生丟失,如果對于應用的要求并不是非常高的話,可暫不考慮異步日志
logback 日志工具可以在日志文件滾動后將前一文件進行壓縮,以減少磁盤空間占用,若使用 logback 對于日志量龐大的應用建議開啟該功能。
-
注意事項
- 禁用 System.out.println
- 預防空指針(不要因為日志問題,造成接口不可用??)
- 不要在日志中進行“字符串拼接”,采用日志提供的格式化,可以避免隔離級別改變時產(chǎn)生的不必要的性能損耗。
- 需要輸出日志的對象,請實現(xiàn)toString方法
- 不要吞掉異常堆棧,這樣會導致出現(xiàn)問題時,無法排錯
logger.error("System error {}", "無此用戶", e);
參考文獻
https://mp.weixin.qq.com/s/d-lH-lPkEWNRKIoXwSBwhQ(Java應用中的日志)