## 十、日志約定
1. 【<font color=red>強制</font>】應用中不可直接使用日志系統(Log4j、Logback)中的 API,而應依賴使用日志框架
> SLF4J 中的 API,使用門面模式的日志框架,有利于維護和各個類的日志處理方式統一。
<code>
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
</code>
2. 【<font color=red>強制</font>】日志文件推薦至少保存 15 天,因為有些異常具備以“周”為頻次發生的特點。
3. 【<font color=red>強制</font>】應用中的擴展日志(如打點、臨時監控、訪問日志等)命名方式:appName_logType_logName.log。
logType:日志類型,推薦分類有stats/desc/monitor/visit 等;
logName:日志描述。
這種命名的好處:通過文件名就可知道日志文件屬于什么應用,什么類型,什么目的,也有利于歸類查找。
> 正例:mppserver 應用中單獨監控時區轉換異常,如:mppserver_monitor_timeZoneConvert.log
說明:推薦對日志進行分類,錯誤日志和業務日志盡量分開存放,便于開發人員查看,也便于
通過日志對系統進行及時監控。
4. 【<font color=red>強制</font>】對 trace/debug/info 級別的日志輸出,必須使用條件輸出形式或者使用占位符的方
式。
> 說明:logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
如果日志級別是 warn,上述日志不會打印,但是會執行字符串拼接操作,如果 symbol 是對象,
會執行 toString()方法,浪費了系統資源,執行了上述操作,最終日志卻沒有打印。
<code>
正例:(條件)
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}
正例:(占位符)
logger.debug("Processing trade with id: {} symbol : {} ", id, symbol);
</code>
5. 【<font color=red>強制</font>】避免重復打印日志,浪費磁盤空間,務必在 log4j.xml 中設置 additivity=false。
><code>正例:<logger name="com.taobao.dubbo.config" additivity="false"></code>
6. 【<font color=red>強制</font>】異常信息應該包括兩類信息:案發現場信息和異常堆棧信息。如果不處理,那么通過
關鍵字 throws 往上拋出。
><code>正例:logger.error(各類參數或者對象 toString + "_" + e.getMessage(), e);</code>
7. 【推薦】謹慎地記錄日志。生產環境禁止輸出 debug 日志;有選擇地輸出 info 日志;如果使
用 warn 來記錄剛上線時的業務行為信息,一定要注意日志輸出量的問題,避免把服務器磁盤
撐爆,并記得及時刪除這些觀察日志。
> 說明:大量地輸出無效日志,不利于系統性能提升,也不利于快速定位錯誤點。記錄日志時請
思考:這些日志真的有人看嗎?看到這條日志你能做什么?能不能給問題排查帶來好處?
8. 【參考】可以使用 warn 日志級別來記錄用戶輸入參數錯誤的情況,避免用戶投訴時,無所適
從。注意日志輸出的級別,error 級別只記錄系統邏輯出錯、異常等重要的錯誤信息。如非必
要,請不要在此場景打出 error 級別。
- 說明
- Python編程規范
- Python風格規范
- Python語言規范
- Java編程規范
- 一、命名約定
- 二、常量定義
- 三、格式約定
- 四、OOP約定
- 五、集合處理
- 六、并發控制
- 七、控制語句
- 八、注釋約定
- 九、異常日志
- 十、日志約定
- Android開發規范
- 前端開發規范
- HTML
- JavaScript
- CSS
- MySQL約定
- 一、基本規范
- 二、庫表設計規范
- 三、字段設計規范
- 四、索引規范
- 五、SQL設計規范
- 六、業務字段命名規范
- 開發安全約定
- 一、代碼安全
- 二、移動開發安全
- 三、服務器安全
- 四、安全意識
- 版本管理
- Git使用規范
- 技術實踐及可視化
- 一、Code Review
- 二、單元測試
- 三、自動化測試
- 四、技術債
- 五、CI
- IOS開發規范