日志記錄與異常處理規(guī)范_第1頁
日志記錄與異常處理規(guī)范_第2頁
日志記錄與異常處理規(guī)范_第3頁
日志記錄與異常處理規(guī)范_第4頁
日志記錄與異常處理規(guī)范_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、日志記錄與異常處理規(guī)范(2006-09-19 10:02:15轉(zhuǎn)載 日志記錄與異常處理規(guī)范 1 日志記錄規(guī)范規(guī)范日志設(shè)計(jì)規(guī)范主要目的是節(jié)省工作量,幫助對問題進(jìn)行診斷。最終,終端用戶可以獲得更好的應(yīng)用程序,并能從技術(shù)支持團(tuán)隊(duì)獲得迅速的響應(yīng)。 1.1 日志API 在使用 Java 平臺進(jìn)行開發(fā)時,使用的日志 API:Log4j-1.2.8.jar 1.2 日志分類 l Security:記錄外部對系統(tǒng)進(jìn)行的各項(xiàng)操作 l Business:記錄和跟蹤業(yè)務(wù)邏輯執(zhí)行過程 l Performance:記錄和跟蹤代碼執(zhí)行情況 1.3 日志級別日志級別有: l Debug: 包含了非常廣泛的上下文信息,用于問

2、題診斷。 l Info: 用于在產(chǎn)品環(huán)境中(粒度較粗)幫助跟蹤執(zhí)行過程的上下文消息。 l Warning: 警告消息,說明系統(tǒng)中可能存在問題。例如,如果這個消息類別是有關(guān)安全性方面的。 l Error: 錯誤消息說明系統(tǒng)中出現(xiàn)了嚴(yán)重的問題。這種問題通常都是不可恢復(fù)的,需要人工進(jìn)行干預(yù)。 表1 日志記錄程序 public class Log4JTest / Logging 類由EMIP平臺提供 Logging logging = Logging.getInstance("STDOUT" public void testLogging( /安全日志 (&

3、quot;安全類型INFO級日志記錄" (Logging. SECURITY,"安全類型INFO級日志記錄" (Logging. SECURITY,"安全類型INFO級日志記錄",new RuntimeException(; logging.error("安全類型ERROR級日志記錄" logging.error(Logging. SECURITY,"安全類型ERROR級日志記錄" logging.error(Logging. SECURITY,"

4、安全類型ERROR級日志記錄",new RuntimeException(; /業(yè)務(wù)日志 ("業(yè)務(wù)類型INFO級日志記錄" (Logging. BUSINESS,"業(yè)務(wù)類型INFO級日志記錄" (Logging. BUSINESS,"業(yè)務(wù)類型INFO級日志記錄",new RuntimeException(; logging.error("業(yè)務(wù)類型ERROR級日志記錄" logging.error(Logging. BUSINESS,&

5、quot;業(yè)務(wù)類型ERROR級日志記錄" logging.error(Logging. BUSINESS,"業(yè)務(wù)類型ERROR級日志記錄",new RuntimeException(; /系統(tǒng)日志 ("業(yè)務(wù)類型INFO級日志記錄" (Logging. BUSINESS,"業(yè)務(wù)類型INFO級日志記錄" (Logging. BUSINESS,"業(yè)務(wù)類型INFO級日志記錄",new RuntimeException(; logging.er

6、ror("業(yè)務(wù)類型ERROR級日志記錄" logging.error(Logging. BUSINESS,"業(yè)務(wù)類型ERROR級日志記錄" logging.error(Logging. BUSINESS,"業(yè)務(wù)類型ERROR級日志記錄",new RuntimeException(; ("系統(tǒng)類型INFO級日志記錄" (Logging.PERFORMANCE,"系統(tǒng)類型INFO級日志記錄" (Logging.PERFORMAN

7、CE,"系統(tǒng)類型INFO級日志記錄",new RuntimeException(; logging.error("系統(tǒng)類型ERROR級日志記錄" logging.error(Logging.PERFORMANCE,"系統(tǒng)類型ERROR級日志記錄" logging.error(Logging.PERFORMANCE,"系統(tǒng)類型ERROR級日志記錄",new RuntimeException(; public static void main(String args Log4JTe st log4JTest = new

8、 Log4JTest(; log4JTest.testLogging(; 輸出結(jié)果(日志記錄的頭部分的組成結(jié)構(gòu)是:時間戳日志級別日志類型日志內(nèi)容) 2006-09-13 18:43:38 INFO安全類型INFO級日志記錄 2006-09-13 18:43:38 INFO SECURITY安全類型INFO級日志記錄 2006-09-13 18:43:38 INFO SECURITY安全類型INFO級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:11 at

9、 com.huawei.test.log4j.Log4JTest.main(Log4JTest.java:31 2006-09-13 18:43:38 ERROR 安全類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR SECURITY安全類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR SECURITY安全類型ERROR級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:13 at com.huawei

10、.test.log4j.Log4JTest.main(Log4JTest.java:31 2006-09-13 18:43:38 INFO 業(yè)務(wù)類型INFO級日志記錄 2006-09-13 18:43:38 INFO BUSINESS業(yè)務(wù)類型INFO級日志記錄 2006-09-13 18:43:38 INFO BUSINESS業(yè)務(wù)類型INFO級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:17 at com.huawei.test.log4j.Log4J

11、Test.main(Log4JTest.java:31 2006-09-13 18:43:38 ERROR 業(yè)務(wù)類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR BUSINESS業(yè)務(wù)類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR BUSINESS業(yè)務(wù)類型ERROR級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:19 at com.huawei.test.log4j.Log4JTest.main(L

12、og4JTest.java:31 2006-09-13 18:43:38 INFO 系統(tǒng)類型INFO級日志記錄 2006-09-13 18:43:38 INFO PERFORMANCE系統(tǒng)類型INFO級日志記錄 2006-09-13 18:43:38 INFO PERFORMANCE系統(tǒng)類型INFO級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:23 at com.huawei.test.log4j.Log4JTest.main(Log4JTest.ja

13、va:31 2006-09-13 18:43:38 ERROR 系統(tǒng)類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR PERFORMANCE系統(tǒng)類型ERROR級日志記錄 2006-09-13 18:43:38 ERROR PERFORMANCE系統(tǒng)類型ERROR級日志記錄 java.lang.RuntimeException at com.huawei.test.log4j.Log4JTest.testLogging(Log4JTest.java:25 at com.huawei.test.log4j.Log4JTest.main(Log4JTest.java:31

14、 1.4 日志消息的格式除了典型的應(yīng)用程序狀態(tài)信息之外,通過配置還應(yīng)記錄以下信息(配置方法參見配置模版): l 線程 ID l 調(diào)用程序的標(biāo)識 l 時間戳 l 源代碼信息 1.5 日志配置 1.5.1 日志配置模板日志模版部署在同一應(yīng)用平臺上的各個模塊,使用同一個XML配置文件進(jìn)行配置。各個模塊在配置文件中配置各自的日志Appender。 1.5.2 動態(tài)配置文件 EMIP平臺的在Logging類中使用 DOMConfigurator 中的 configureAndWatch( 方法會對 Log4J 進(jìn)行配置,默認(rèn)一分鐘為周期動態(tài)監(jiān)視日志配置文件。 1.6 日志記錄規(guī)范 1. 不要把syste

15、m.out用于日志記錄。 2. 被認(rèn)為“已完成”或無隱錯的代碼,也應(yīng)該能夠根據(jù)配置輸出日志(因?yàn)榭傆写嬖陔[錯的可能性,可能是通過修改引入的)。 3. 除非代碼能夠生成日志消息,并且它的日至輸出能夠被容易的配置,否則它不可用于生產(chǎn)環(huán)境。 4. 在重要代碼段中需要詳盡的日志記錄輸出。 5. 在用于生產(chǎn)環(huán)境前,需要修改和改進(jìn)維護(hù)期間的日志記錄陳述(例如,如果日志輸出顯得不明確)。 6. 日志消息應(yīng)該分成不同優(yōu)先級,并且調(diào)試消息應(yīng)該指出一個構(gòu)件的整個工作流程。 7. 明確日志消息優(yōu)先級的選擇,具有相同優(yōu)先級的日志消息應(yīng)該揭示一致級別的細(xì)節(jié)。 8. 從異常中提取有用信息 l 發(fā)生一個非預(yù)期的異常時:首先

16、,必須記錄異常及其堆棧跟蹤狀況。其次,應(yīng)該使用一種用戶界面友好的方式來標(biāo)識錯誤頁面,這對于終端用戶和技術(shù)支持小組來說都是非常有幫助的。 l 使用戶所報告的問題與特定的日志異常之間建立某種關(guān)聯(lián):為每個異常都記錄一個唯一的 ID。這個 ID 可以告訴用戶,也可以包含在終端用戶所填寫的問題報告表單中。讓技術(shù)支持團(tuán)隊(duì)可以快速對問題作出響應(yīng)??紤]到可讀性的問題。 9. 確保日志記錄語句中調(diào)用toString(方法的對象不會是空值,以免這些語句引起失敗。 10. 通過相應(yīng)的配置,用來顯示生成日志輸出的那個類、方法和行號(Log4j提供此功能)。該設(shè)置在生產(chǎn)中應(yīng)該被關(guān)閉,因?yàn)樯蛇@類信息的代價非常高。 11

17、. 記錄日志時不要把toString(方法用在訪問具有許多方法并生成大串的復(fù)雜對象上。(也可以給這種日志輸出定義一個低優(yōu)先級的輸出級別)。 1.7 日志文件的管理日志文件的生成根據(jù)具體情況選用以下兩者之一: l RollingFileAppender l DailyRollingFileAppender 2 異常處理規(guī)范 2.1 規(guī)范 1. 當(dāng)程序產(chǎn)生異常時,必須捕捉并處理異常、將異常記錄到日志中(除非打算拋出異常)。 2. 不要處理能夠避免的異常。 3. 在異常處理模塊中提供適量的錯誤原因信息。 4. 使用finally避免資源泄露。 5. 不要從try區(qū)段中返回。 6. 不要在 final

18、ly 內(nèi)部使用 return 語句。它不僅會影響函數(shù)的正確返回值,而且它可能還會導(dǎo)致一些異常處理過程的意外終止,最終導(dǎo)致某些異常的丟失。 7. 將try/catch區(qū)段置于循環(huán)之外。 8. 不要將異常用于程序流程控制。 9. 通過拋出異常,獲取構(gòu)造函數(shù)中的錯誤信息。 10. 拋出異常之前先將對象恢復(fù)為有效狀態(tài)。 11. 記錄異常不要保存exception.getMessage(,而要記錄exception.toString(。 12. 一個方法不應(yīng)拋出太多類型的異常。 說明:如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實(shí)有很多異常類型首先考慮用異常描述來區(qū)別,throws/exception子句標(biāo)明的異常最好不要超過三個。 13. 不要定義 Error 和 R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論