一、代碼風格
代碼風格實際上就是合理使用縮進、空格、換行,目的是讓代碼可讀性更強。大家記憶時記清楚用什么樣的縮進,哪些時候使用空格,哪些時候使用換行,單行代碼不要太長就可以,這部分內容通過兩三次的回顧很容易養成習慣,因為是編碼中最長用到的。
可參考以下代碼:
public static void main(String[] args) {
// 縮進 4 個空格
String say = "hello";
// 運算符的左右必須有一個空格
int flag = 0;
// 關鍵詞if/for/while/switch/do與括號之間必須有一個空格,括號內的 flag 與左括號,0 與右括號不需要空格
if (flag == 0) {
System.out.println(say);
}
// 左大括號前加空格且不換行;左大括號后換行
if (flag == 1) {
System.out.println("world");
// 右大括號前換行,右大括號后有 else,不用換行
} else {
System.out.println("ok");
// 在右大括號后直接結束,則必須換行
}
StringBuffer sb = new StringBuffer();
// 超過120個字符的情況下,換行縮進4個空格,點號和方法名稱一起換行
sb.append("zi").append("xin")...
.append("huang")...
.append("huang")...
.append("huang");
// 任何二目、三目運算符的左右兩邊都需要加一個空格
int result = flag == 0 ? 1 : 0;
}
下邊是另外幾點需要注意的:
- 注釋的雙斜線與注釋內容之間有且僅有一個空格。
- 方法參數在定義和傳入時,多個參數逗號后邊必須加空格,如method("a", "b")。
- 沒有必要增加若干空格來使某一行的字符與上一行對應位置的字符對齊。
- 方法體內的執行語句組、變量的定義語句組、不同的業務邏輯之間或者不同的語義 之間插入一個空行。相同業務邏輯和語義之間不需要插入空行。沒有必要插入多個空行進行隔開。
二、日志
1.日志配置
主要有日志文件名稱、日志輸出級別、日志是否向上層傳遞、日志保留時間。
- 日志文件推薦至少保存15天,因為有些異常具備以“周”為頻次發生的特點。
- 避免重復打印日志,浪費磁盤空間,務必在 log4j.xml 中設置 additivity=false
- 謹慎地記錄日志。生產環境禁止輸出 debug 日志;有選擇地輸出 info 日志;如果使 用 warn 來記錄剛上線時的業務行為信息,一定要注意日志輸出量的問題,避免把服務器磁盤 撐爆,并記得及時刪除這些觀察日志。
- 應用中的擴展日志(如打點、臨時監控、訪問日志等)命名方式:appName_logType_logName.log。logType:日志類型,推薦分類有stats/desc/monitor/visit 等;logName:日志描述。這種命名的好處:通過文件名就可知 道日志文件屬于什么應用,什么類型,什么目的,也有利于歸類查找。
2.日志使用
- 應用中不可直接使用日志系統(Log4j、Logback)中的 API,而應依賴使用日志框架SLF4J 中的 API,使用門面模式的日志框架,有利于維護和各個類的日志處理方式統一。
- 對 trace/debug/info 級別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。
- 異常信息應該包括兩類信息:案發現場信息和異常堆棧信息。如果不處理,那么通過 關鍵字 throws 往上拋出。推薦
logger.error(各類參數或者對象toString + "_" + e.getMessage(), e);
這種格式,不要簡單的輸出e.getMessage(),那樣具體的錯誤信息都被隱藏,很不利于排查問題。 - 注意日志輸出級別和使用場景,避免大量調試日志被生成,最近就遇到過一次在高頻接口輸出調試信息,忘記清理,在調用高峰拖死了tomcat;在生成環境,盡量只記錄異常信息和較重要的業務信息,且控制其量。
- while、for循環等內部的異常需要特別注意發生異常的條件,曾經遇到過while循環從redis隊列內取值(事件),redis服務宕機,結果異常日志刷爆磁盤的情況。