Java開發(fā)手冊(cè)(三):代碼風(fēng)格與日志

一、代碼風(fēng)格

代碼風(fēng)格實(shí)際上就是合理使用縮進(jìn)、空格、換行,目的是讓代碼可讀性更強(qiáng)。大家記憶時(shí)記清楚用什么樣的縮進(jìn),哪些時(shí)候使用空格,哪些時(shí)候使用換行,單行代碼不要太長就可以,這部分內(nèi)容通過兩三次的回顧很容易養(yǎng)成習(xí)慣,因?yàn)槭蔷幋a中最長用到的。
可參考以下代碼:

public static void main(String[] args) {
    // 縮進(jìn) 4 個(gè)空格
    String say = "hello";
    // 運(yùn)算符的左右必須有一個(gè)空格 
    int flag = 0;
    // 關(guān)鍵詞if/for/while/switch/do與括號(hào)之間必須有一個(gè)空格,括號(hào)內(nèi)的 flag 與左括號(hào),0 與右括號(hào)不需要空格 
    if (flag == 0) {
       System.out.println(say);
    }
    
    // 左大括號(hào)前加空格且不換行;左大括號(hào)后換行 
    if (flag == 1) {
       System.out.println("world");
    // 右大括號(hào)前換行,右大括號(hào)后有 else,不用換行 
    } else {
       System.out.println("ok");
    // 在右大括號(hào)后直接結(jié)束,則必須換行
    }
    
    StringBuffer sb = new StringBuffer();  
    // 超過120個(gè)字符的情況下,換行縮進(jìn)4個(gè)空格,點(diǎn)號(hào)和方法名稱一起換行   
    sb.append("zi").append("xin")...  
    .append("huang")...  
    .append("huang")...  
    .append("huang");
   
   // 任何二目、三目運(yùn)算符的左右兩邊都需要加一個(gè)空格
   int result = flag == 0 ? 1 : 0;
}

下邊是另外幾點(diǎn)需要注意的:

  1. 注釋的雙斜線與注釋內(nèi)容之間有且僅有一個(gè)空格。
  2. 方法參數(shù)在定義和傳入時(shí),多個(gè)參數(shù)逗號(hào)后邊必須加空格,如method("a", "b")。
  3. 沒有必要增加若干空格來使某一行的字符與上一行對(duì)應(yīng)位置的字符對(duì)齊。
  4. 方法體內(nèi)的執(zhí)行語句組、變量的定義語句組、不同的業(yè)務(wù)邏輯之間或者不同的語義 之間插入一個(gè)空行。相同業(yè)務(wù)邏輯和語義之間不需要插入空行。沒有必要插入多個(gè)空行進(jìn)行隔開。

二、日志

1.日志配置

主要有日志文件名稱、日志輸出級(jí)別、日志是否向上層傳遞、日志保留時(shí)間。

  1. 日志文件推薦至少保存15天,因?yàn)橛行┊惓>邆湟浴爸堋睘轭l次發(fā)生的特點(diǎn)。
  2. 避免重復(fù)打印日志,浪費(fèi)磁盤空間,務(wù)必在 log4j.xml 中設(shè)置 additivity=false
  3. 謹(jǐn)慎地記錄日志。生產(chǎn)環(huán)境禁止輸出 debug 日志;有選擇地輸出 info 日志;如果使 用 warn 來記錄剛上線時(shí)的業(yè)務(wù)行為信息,一定要注意日志輸出量的問題,避免把服務(wù)器磁盤 撐爆,并記得及時(shí)刪除這些觀察日志。
  4. 應(yīng)用中的擴(kuò)展日志(如打點(diǎn)、臨時(shí)監(jiān)控、訪問日志等)命名方式:appName_logType_logName.log。logType:日志類型,推薦分類有stats/desc/monitor/visit 等;logName:日志描述。這種命名的好處:通過文件名就可知 道日志文件屬于什么應(yīng)用,什么類型,什么目的,也有利于歸類查找。
2.日志使用
  1. 應(yīng)用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的 API,而應(yīng)依賴使用日志框架SLF4J 中的 API,使用門面模式的日志框架,有利于維護(hù)和各個(gè)類的日志處理方式統(tǒng)一。
  2. 對(duì) trace/debug/info 級(jí)別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。
  3. 異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場(chǎng)信息和異常堆棧信息。如果不處理,那么通過 關(guān)鍵字 throws 往上拋出。推薦logger.error(各類參數(shù)或者對(duì)象toString + "_" + e.getMessage(), e);這種格式,不要簡單的輸出e.getMessage(),那樣具體的錯(cuò)誤信息都被隱藏,很不利于排查問題。
  4. 注意日志輸出級(jí)別和使用場(chǎng)景,避免大量調(diào)試日志被生成,最近就遇到過一次在高頻接口輸出調(diào)試信息,忘記清理,在調(diào)用高峰拖死了tomcat;在生成環(huán)境,盡量只記錄異常信息和較重要的業(yè)務(wù)信息,且控制其量。
  5. while、for循環(huán)等內(nèi)部的異常需要特別注意發(fā)生異常的條件,曾經(jīng)遇到過while循環(huán)從redis隊(duì)列內(nèi)取值(事件),redis服務(wù)宕機(jī),結(jié)果異常日志刷爆磁盤的情況。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容