1. 程式人生 > >java程式碼風格與日誌

java程式碼風格與日誌

一、程式碼風格

程式碼風格實際上就是合理使用縮排、空格、換行,目的是讓程式碼可讀性更強。大家記憶時記清楚用什麼樣的縮排,哪些時候使用空格,哪些時候使用換行,單行程式碼不要太長就可以,這部分內容通過兩三次的回顧很容易養成習慣,因為是編碼中最長用到的。 
可參考以下程式碼:

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;
}

下邊是另外幾點需要注意的:

  1. 註釋的雙斜線與註釋內容之間有且僅有一個空格。
  2. 方法引數在定義和傳入時,多個引數逗號後邊必須加空格,如method(“a”, “b”)。
  3. 沒有必要增加若干空格來使某一行的字元與上一行對應位置的字元對齊。
  4. 方法體內的執行語句組、變數的定義語句組、不同的業務邏輯之間或者不同的語義 之間插入一個空行。相同業務邏輯和語義之間不需要插入空行。沒有必要插入多個空行進行隔開。

二、日誌

1.日誌配置

主要有日誌檔名稱、日誌輸出級別、日誌是否向上層傳遞、日誌保留時間。

  1. 日誌檔案推薦至少儲存15天,因為有些異常具備以“周”為頻次發生的特點。
  2. 避免重複列印日誌,浪費磁碟空間,務必在 log4j.xml 中設定 additivity=false
  3. 謹慎地記錄日誌。生產環境禁止輸出 debug 日誌;有選擇地輸出 info 日誌;如果使 用 warn 來記錄剛上線時的業務行為資訊,一定要注意日誌輸出量的問題,避免把伺服器磁碟 撐爆,並記得及時刪除這些觀察日誌。
  4. 應用中的擴充套件日誌(如打點、臨時監控、訪問日誌等)命名方式:appName_logType_logName.log。logType:日誌型別,推薦分類有stats/desc/monitor/visit 等;logName:日誌描述。這種命名的好處:通過檔名就可知 道日誌檔案屬於什麼應用,什麼型別,什麼目的,也有利於歸類查詢。

2.日誌使用

  1. 應用中不可直接使用日誌系統(Log4j、Logback)中的 API,而應依賴使用日誌框架SLF4J 中的 API,使用門面模式的日誌框架,有利於維護和各個類的日誌處理方式統一。
  2. 對 trace/debug/info 級別的日誌輸出,必須使用條件輸出形式或者使用佔位符的方式。
  3. 異常資訊應該包括兩類資訊:案發現場資訊和異常堆疊資訊。如果不處理,那麼通過 關鍵字 throws 往上丟擲。推薦logger.error(各類引數或者物件toString + "_" + e.getMessage(), e);這種格式,不要簡單的輸出e.getMessage(),那樣具體的錯誤資訊都被隱藏,很不利於排查問題。
  4. 注意日誌輸出級別和使用場景,避免大量除錯日誌被生成,最近就遇到過一次在高頻介面輸出除錯資訊,忘記清理,在呼叫高峰拖死了tomcat;在生成環境,儘量只記錄異常資訊和較重要的業務資訊,且控制其量。
  5. while、for迴圈等內部的異常需要特別注意發生異常的條件,曾經遇到過while迴圈從redis佇列內取值(事件),redis服務宕機,結果異常日誌刷爆磁碟的情況。