[發(fā)明專利]一種檢測未判斷日志輸出級別而直接輸出日志的方法有效
| 申請?zhí)枺?/td> | 201110362084.X | 申請日: | 2011-11-16 |
| 公開(公告)號: | CN102508778A | 公開(公告)日: | 2012-06-20 |
| 發(fā)明(設計)人: | 夏雪;闞寶麗 | 申請(專利權)人: | 山東浪潮齊魯軟件產業(yè)股份有限公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 250001 山東*** | 國省代碼: | 山東;37 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 檢測 判斷 日志 輸出 級別 直接 方法 | ||
?
技術領域
本發(fā)明涉及計算機技術,具體地說是一種檢測未判斷日志輸出級別而直接輸出日志的方法,用于檢測在j2ee軟件應用中使用了Log4j的日志輸出功能卻未判斷日志輸出級別的問題。
背景技術
Log4j是廣泛應用于j2ee應用的開源框架,用來輸出j2ee應用運行過程中產生的日志,如果使用不當將對系統(tǒng)性能造成影響,并發(fā)量高、大數量時甚至會導致宕機的情況。具體應用錯誤的情況如下:輸出日志時未先判斷日志輸出級別是否被允許輸出,當該級別不允許輸出時,在運行時,仍然會先構建傳入方法內的作為輸出內容的參數字符串,這個過程占用的CPU和內存資源是沒有價值的。
現有技術中,僅能通過在運行環(huán)境中實際執(zhí)行操作,然后再分析JVM內存的方式去發(fā)現使用Log4j框架時未判斷日志輸出級別而直接輸出日志的問題,這種方式由于需要部署運行環(huán)境并要實際執(zhí)行操作,所以會消耗更多的成本和更多的時間。而且,對于操作未執(zhí)行到的語句無法找出它的問題,對于內存消耗不明顯的語句也無法找出它的問題。
發(fā)明內容
本發(fā)明的技術任務是針對上述現有技術的不足,提供一種檢測周期短、成本低的檢測未判斷日志輸出級別而直接輸出日志的方法。
本發(fā)明的技術任務是按以下方式實現的:一種檢測未判斷日志輸出級別而直接輸出日志的方法,包括以下步驟:
A、分析JAVA代碼的類文件,遍歷所有的命令代碼,找出使用了Log4j日志輸出級別判斷的命令;
B、分析JAVA代碼的類文件,遍歷所有的命令代碼,找出使用了Log4j框架輸出日志功能的命令,并判斷在調用前是否已經判斷了日志輸出級別。
進一步的,該方法包括以下步驟:
A、分析JAVA代碼的類文件,遍歷所有的命令代碼,找出使用了Log4j日志輸出級別判斷的命令:
打開JAVA代碼的類文件,逐條命令進行解析,找出Log4j日志輸出級別判斷的判定語句的語句塊范圍,
a1、若命令的操作碼為IFEQ,說明該命令是一個判定語句,取得該命令的范圍,該范圍標明了判定語句開始執(zhí)行的位置和結束的位置;
a2、若命令的操作碼為INVOKEVIRTUAL,且執(zhí)行的方法名為isDebugEnabled或isInfoEnabled或isEnabledFor,說明該命令調用了Log4j的日志輸出級別判斷的功能,取得該命令所處的位置,判斷該命令是否處于判定語句塊內,如果判斷日志輸出級別的語句處于判定語句塊中,就記錄下判定語句塊的開始位置和結束位置;
a3、重復a1和a2的過程,將該類文件中所有已經調用了Log4j的日志輸出級別判斷的功能的判定語句塊找出并記錄語句塊的開始位置和結束位置;
B、分析JAVA代碼的類文件,遍歷所有的命令代碼,找出使用了Log4j框架輸出日志功能的命令,并判斷在調用前是否已經判斷了日志輸出級別:
打開JAVA代碼的類文件,逐條命令進行解析,若符合以下所有條件,判定該命令使用了Log4j輸出日志的功能:
該命令的操作碼為INVOKEVIRTUAL;
操作類的類名為org.apache.Log4j.Logger;
執(zhí)行的方法名為debug或info或error或fatal或warn;
如果判定結果為該命令使用了Log4j輸出日志的功能,且該命令的位置大于A中記錄的判定語句塊的開始位置小于結束位置,則可認為它位于判定語句塊內,可判定該處的日志輸出已經提前進行了日志級別是否允許輸出的判定,否則,可判定此處存在使用Log4j框架時未判斷日志輸出級別而直接輸出日志的錯誤用法。
本發(fā)明的檢測未判斷日志輸出級別而直接輸出日志的方法與現有技術相比具有以下突出的有益效果:
(一)???????????????????該方法采用的是全新的靜態(tài)分析的方法,只需要源代碼編譯后的類文件,不需要運行環(huán)境,極大地降低了檢測成本;
(二)???????????????????開發(fā)人員編寫完代碼就可以檢查他的代碼是否存在使用Log4j框架時未判斷日志輸出級別而直接輸出日志的問題,不需要發(fā)布到運行環(huán)境,也不需要人工去執(zhí)行它,所以極大地降低了檢測周期;
(三)???????????????????可對所有的java類文件進行檢測,檢測時遍歷了程序的所有命令,所以可以找出所有使用Log4j框架時未判斷日志輸出級別而直接輸出日志的問題;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于山東浪潮齊魯軟件產業(yè)股份有限公司,未經山東浪潮齊魯軟件產業(yè)股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業(yè)授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110362084.X/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:感應式電磁泄漏檢測裝置及其檢測方法
- 下一篇:一種可拔染色紡紗線的加工方法





