日誌處理—簡單實現

一、什麼是Log

        在應用程序開發領域,特別是企業級應用程序,需要在程序不停止的情況下,能夠分析程序的運行過程。這個時候就需要把程序運行過程中的數據內容,分支選擇,異常,錯誤等信息完整的記錄下來。實現這個功能的部件就叫做日誌(log)。


二、記錄Log的方法

        常見的記錄日誌的方法有,

        Java Logging API 需 JDK1.4 版本以上才能支持。java.util.logging.* 包是 JDK 的日誌記錄 API 。

        Log4j。Log4j 比 JDK Logging 更加成熟。 Log4j 事實上是 日誌記錄標準。

       Commons log。通用 Log 處理,它是一個接口抽象,底層的實現可以自動替換:如果當前存在 log4j, 則使用 log4j 來實現 ( 自動按 log4j 配置要求 , 配置輸出路徑 )否則,使用 JDK LOG 來實現。否則,使用其自身的簡單實現


三、簡單實現:

        今天介紹的是使用logging+commons-logging+log4j輸出日誌。有點將上面提到的處理日誌方法大雜燴的感覺。但用起來還是很方便的。

首先,需要引入logging、commons-logging、log4這三個工具包

        然後,建立一個簡單的java項目:logtest測試類,以及log4j.properties日誌配置文件。

import org.apache.commons.logging.Log;  
import org.apache.commons.logging.LogFactory;  
  
public class logTest {  

    public static void main(String[] args) {  
          
        Log logger = LogFactory.getLog(logTest.class);  
          
        logger.debug("DUBUG調試信息");  
       
    }  
  
}  
下面是比較重要的log4j.properties日誌配置文件

###direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p %c{1}:%L - %m%n
 
#direct messages to file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/oa.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}%5p %c{1}:%L - %m%n
 
#set log levels
log4j.rootLogger=warn,stdout, file
 
#對com.test目錄及其子目錄有效,如果不指明,則遵循log4j.rootLogger
log4j.logger.com.test =debug,stdout,file

四、知識拓展(來自網絡)

1、Logger
Logger按照佈局中指定的格式把日誌信息寫入一個或多個輸出源,Log4j 允許開發人員定義多個Logger,每個Logger擁有自己的名字,Logger之間通過名字來表明隸屬關係。

2、Level
它還有一個重要的屬性——日誌級別。不管何種日誌記錄工具,大概包含如下幾種日誌級別,優先級由低到高:DEBUG,INFO,WARN,ERROR,FATAL。
在程序中打印日誌信息時,優先級別低於配置文件中指定的級別時,將不做任何處理;比如配置文件中指定優先級別是WARN,當程序中有代碼logger.info(message),則對message不會進行處理(輸出到控制檯或者文件)
在log4j中,使用

log4j.rootLogger=[級別],[使用哪個appender]

log4.logger.[logger的名稱]=[級別],[使用哪個appender]

來對logger進行配置。如果某個logger沒有進行配置,那麼就會使用rootLogger的配置信息。

3、Appender
一個Appender表示一個輸出的目的地。Appendr可以是控制檯、文本文件、XML文件或Socket。一個Logger可以擁有多個Appender ,即可以將種信息輸出到多個位置。
在log4j中,使用
log4j.appender.[appender的名稱]=[appender類名]
log4j.appender.[appender的名稱].[appender的屬性名]=[appender的屬性值]
來對appender進行配置

4、Layout
Layout組件負責格式化輸出的日誌信息,一個Appender只能有一個Layout。
在log4j中,使用
log4j.appender.[appender的名稱].layout=[layout的類名]
log4j.appender.[appender的名稱].layout.[layout的屬性名]=[layout的屬性名]
來對layout進行配置
而log4j採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下:

%m輸出代碼中指定的消息
%p輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r輸出自應用啓動到輸出該log信息耗費的毫秒數
%c輸出所屬的類目,通常就是所在類的全名
%t輸出產生該日誌事件的線程名
%n輸出一個回車換行符,Windows平臺爲“\r\n”,Unix平臺爲“\n”
%d輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,如:%d{yyyyMM dd HH:mm:ss}
%l輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數




發佈了108 篇原創文章 · 獲贊 59 · 訪問量 106萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章