Java日志系統(tǒng):不可或缺的跟蹤調(diào)試工具
Java日志系統(tǒng)是一種不可或缺的跟蹤調(diào)試工具,特別是在任何無人職守的后臺(tái)程序以及那些沒有跟蹤調(diào)試環(huán)境的系統(tǒng)中有著廣泛的應(yīng)用。 長(zhǎng)期以來, 日志系統(tǒng)作為一種應(yīng)用程序服務(wù),對(duì)于跟蹤調(diào)試、程序狀態(tài)記錄、崩潰數(shù)據(jù)恢復(fù)都有非?,F(xiàn)實(shí)的意義。這種服務(wù)通常以兩種方式存在:
1.Java日志系統(tǒng)作為服務(wù)進(jìn)程存在。Windows中的的事件日志服務(wù)就屬于這種類型,該類型的日志系統(tǒng)通常通過消息隊(duì)列機(jī)制將所需要記錄的日志由日志發(fā)送端發(fā)送給日志服務(wù)。日志發(fā)送端和日志保存端通常不在同一進(jìn)程當(dāng)中,日志的發(fā)送是異步過程。這種日志服務(wù)通常用于管理員監(jiān)控各種系統(tǒng)服務(wù)的狀態(tài)。
2.Java日志系統(tǒng)作為系統(tǒng)調(diào)用存在。Java世界中的日志系統(tǒng)和Unix環(huán)境下諸多守護(hù)進(jìn)程所使用的日志系統(tǒng)都屬于這種類型。日志系統(tǒng)的代碼作為系統(tǒng)調(diào)用被編譯進(jìn)日志發(fā)送端,日志系統(tǒng)的運(yùn)行和業(yè)務(wù)代碼的運(yùn)行在同一進(jìn)程空間。日志的發(fā)送多數(shù)屬于同步過程。這種日志服務(wù)由于能夠同步反映處系統(tǒng)運(yùn)行狀態(tài),通常用于調(diào)試跟蹤和崩潰恢復(fù)。
本文建立的Java日志系統(tǒng)基本屬于第二種類型,但又有所不同。該日志系統(tǒng)將利用 Java 線程技術(shù)實(shí)現(xiàn)一個(gè)既能夠反映統(tǒng)一線程空間中程序運(yùn)行狀態(tài)的同步日志發(fā)送過程,又能夠提供快速的日志記錄服務(wù),還能夠提供靈活的日志格式配置和過濾機(jī)制。
1.1系統(tǒng)調(diào)試的誤區(qū)
在控制臺(tái)環(huán)境上調(diào)試 Java 程序時(shí),此時(shí)往控制臺(tái)或者文本文件輸出一段文字是查看程序運(yùn)行狀態(tài)最簡(jiǎn)單的做法,但這種方式并不能解決全部的問題。有時(shí)候,對(duì)于一個(gè)我們無法實(shí)時(shí)查看系統(tǒng)輸出的系統(tǒng)或者一個(gè)確實(shí)需要保留我們輸出信息的系統(tǒng),良好的日志系統(tǒng)顯得相當(dāng)必要。
因此,不能隨意的輸出各種不規(guī)范的調(diào)試信息,這些隨意輸出的信息是不可控的,難以清除,可能為后臺(tái)監(jiān)控、錯(cuò)誤排除和錯(cuò)誤恢復(fù)帶來相當(dāng)大的阻力。
1.2日志系統(tǒng)框架的基本功能
一個(gè)完備的日志系統(tǒng)框架通常應(yīng)當(dāng)包括如下基本特性:
所輸出的日志擁有自己的分類。這樣在調(diào)試時(shí)便于針對(duì)不同系統(tǒng)的不同模塊進(jìn)行查詢,從而快速定位到發(fā)生日志事件的代碼。
日志按照某種標(biāo)準(zhǔn)分成不同級(jí)別。分級(jí)以后的日志,可以用于同一分類下的日志篩選。
支持多線程。日志系統(tǒng)通常會(huì)在多線程環(huán)境中使用,特別是在 Java 系統(tǒng)當(dāng)中,因此作為一種系統(tǒng)資源,日志系統(tǒng)應(yīng)當(dāng)保證是線程安全的。
支持不同的記錄媒介。不同的工程項(xiàng)目往往對(duì)日志系統(tǒng)的記錄媒介要求不同,因此日志系統(tǒng)必須提供必要的開發(fā)接口,以保證能夠比較容易的更換記錄介質(zhì)。
高性能。日志系統(tǒng)通常要提供高速的日志記錄功能以應(yīng)對(duì)大系統(tǒng)下大請(qǐng)求流量下系統(tǒng)的正常運(yùn)轉(zhuǎn)。
穩(wěn)定性。日志系統(tǒng)必須是保持高度的穩(wěn)定性,不能因?yàn)槿罩鞠到y(tǒng)內(nèi)部錯(cuò)誤導(dǎo)致主要業(yè)務(wù)代碼的崩潰。
1.3常用Java日志系統(tǒng)簡(jiǎn)介
在 Java 世界中,以下三種日志系統(tǒng)框架比較優(yōu)秀:
1) Log4J
最早的 Java日志框架之一,由 Apache 基金會(huì)發(fā)起,提供靈活而強(qiáng)大的日志記錄機(jī)制。但是其復(fù)雜的配置過程和內(nèi)部概念往往令使用者望而卻步。
2) JDK1.4 Logging Framework
繼 Log4J 之后,JDK 標(biāo)準(zhǔn)委員會(huì)將 Log4J 的基本思想吸收到 JDK 當(dāng)中,在 JDK1.4 中發(fā)布了第一個(gè)日志框架接口,并提供了一個(gè)簡(jiǎn)單實(shí)現(xiàn)。
3) Commons Logging Framwork
該框架同樣是 Apache 基金會(huì)項(xiàng)目,其出現(xiàn)主要是為了使得 Java 項(xiàng)目能夠在 Log4J 和 JDK1.4 l Logging Framework 的使用上隨意進(jìn)行切換,因此該框架提供了統(tǒng)一的調(diào)用接口和配置方法。
【編輯推薦】