標籤: 暫無標籤

log4j在JAVA中可算是大名鼎鼎的日誌開發包了,它為apche組織維護項目,VxR兄使用php來實現了log4j的功能, 目前log4php已經作為log4j的一個子項目存在,詳細信息可查看來源中官方網站。

log4php0.9的詳細配置實例說明  

1 log4php -一、什麼是log4php:

log4j在JAVA中可算是大名鼎鼎的日誌開發包了,它為apche組織維護項目,VxR兄使用php來實現了log4j的功能, 目前log4php已經作為log4j的一個子項目存在,詳細信息可查看來源中官方網站。

2 log4php -二、安裝:

本文下載版本為log4php-0.9.tar.gz, 解壓后目錄中有src目錄,將{解壓目錄}/src/log4php/目錄拷貝至你的項目目錄,完成安裝。因為本文是用來講解log4php的, 所以不相關目錄都不列出來,把它定義為http://localhost, 項目結構圖如下: 
+app/ 
   + log4php 
   + images/ 
   + logs/ 
   + js/ 
   + css/ 
   - log4php.properties 
   - index.php 

3 log4php -三、開始使用:

先從最簡單的來,先來看看test1.php中的內容: 
代碼:

<?php 
" define (LOG4PHP_DIR, "log4php"); 

" require_once(LOG4PHP_DIR . '/LoggerManager.php'); 

" $str = "here is test string!"; 

" echo "這裡是PHP的輸出, 與log4php無關喲!<br>"; 

" $logger = LoggerManager::getLogger('test'); 

" if ("" != $str) { 
   $logger->debug("str的值不為空! 它的值為: " . $str . "<br>"); 
  } 

" if (strlen($str) > 4) { 
    $logger->debug("str的長度大於4!" . "<br>"); 
  } 

"  LoggerManager::shutdown(); 
?>  


程序非常簡單,來看看各處標記的作用: 
1. 定義LOG4PHP_DIR目錄名為log4php, 也就是我們目錄結構中的log4php目錄 
2. 包含LoggerManager.php, 它是我們在程序中主要用到的類,通過它的getLogger()靜態方法取得一個logger類,在第5處時使用這個類 
3. 定義一個字串$str, 用來測試,在第6與第7處使用條件判斷來產生logger的debug信息。 
4. 這裡代表著你的PHP輸出,為了區別PHP程序輸出與logger輸出信息的不同,在這裡先輸出一條信息。 
5. 通過LoggerManager類的getLogger()靜態方法取得一個logger類,它的參數一般為類名,這個信息用來區別不同的logger記錄,在這裡我們只用到了一個測試類,因此這個名稱我們可以定義為test, 當然你也可以定義為test1, test2... 
6. 如果$str不為空則輸出一條調試信息 
7. 如果$str的長度超過4輸出一條調試信息 
OK,現在我們來執行一下http://localhost/test1.php. 不對,只有4處輸出的語句而沒有調試信息!怎麼回事?原因是我們還沒有設置log4php的配置文件!好,我這裡有一個簡單的配置文件,代碼如下: 
代碼:

<?php 

log4php.rootLogger=DEBUG, A1 
log4php.appender.A1=LoggerAppenderEcho 
log4php.appender.A1.layout=LoggerLayoutSimple 

?> 

 

先不用管這些代碼是什麼意思,在app目錄中新建立一個log4php.properties文件,然後將以上的代碼拷貝至這個文件里,保存。 
注意: 
1. 這個文件的文件名必須是log4php.properties,不要寫錯 
2. 這個文件必需與index.php同級,也就是在app目錄下 

OK,執行完這一步繼續執行http://localhost/test1.php, 
這時我們將會看到這樣的代碼: 
代碼:

<?php 

這裡是PHP的輸出, 與log4php無關喲! 
DEBUG - str的值不為空! 它的值為: here is test string! 
DEBUG - str的長度大於4!     

?> 

 

看到這裡,有人就會說了,為什麼上邊會有兩個注意的地方?我想把文件名改成log4.txt, 同時為了方便我還要把它的位置放在另一個地方,比如我的項目中有
一個專門的配置文件目錄config/,我想把log4.txt放在config/目錄中, OK, 可以, 如果你這樣做了,那麼在test1.php中還需要在1處後邊加一條語句: 
代碼:

<?php 

define (LOG4PHP_CONFIGURATION, "/config/log4.txt"); 

?> 

 

這裡要說明的一定,因為log4php的屬性文件採用的是properties格式,這種格式在JAVA中一般的擴展名為.properties, 因此我們還是將log4.txt的擴展名修改為log4.properties, 這樣更符合習慣一些。log4php也支持XML格式定義的配置文件,不過一般說來XML文件的可讀性較差,我在這裡就統一使用properties格式的配置文件了。 

OK,高級的東西我們放到下邊去看,我們來看執行后的頁面,好像很簡單一樣,與echo 沒什麼兩樣,好,我們先不用知道為什麼,先將log4.properties中的最後一條log4php.appender.A1.layout的值由LoggerLayoutSimple改為LoggerLayoutHtml, 保存后再執行http://localhost/test1.php看看,哈哈,現在是不是感覺舒服一些了?也對得起這自己花這麼長時間來看這個東西了。後邊所謂的高級使用也就是來詳細說明這個配置文件的使用的。通過配置文件,我們可以使用一些更高級的功能,例如將日誌寫成文件等。 

四、高級使用: 
Log4php由三個重要的組件構成:日誌信息的優先順序,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先順序從高到低有ERROR、WARN、INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將附加到執行文件尾還是文件中;而輸出格式則控制了日誌信息的顯示內容。 
1. 日誌的優先順序,日誌信息有四種分類(常用),可以通過在在配置文件中設置優先順序來將代碼中出現的調試信息顯示或隱藏,舉例來講,當我把日誌等級調整至WARN級時,那麼程序中所出現的ERROR信息(通過$log->error("error message here!"))及WARN等級的信息可以記錄出來,而程序中所有使用INFO與DEBUG級的信息都將不顯示,它由 
"log4php.rootLogger=DEBUG, A1"中rootLogger的第一個參數定義,這一句的意思是將調試等級定義為DEBUG級,也就是說程序中所有的ERROR, WARN,INFO, DEBUG信息都可以顯示出來, 如果將等級設置為INFO, 那麼只能有ERROR, WARN, INFO這三種信息可顯示。 

以下是常用四種等級的用法: 
DEBUG Level指出細粒度信息事件對調試應用程序是非常有幫助的。 
INFO level表明 消息在粗粒度級別上突出強調應用程序的運行過程。 
WARN level表明會出現潛在錯誤的情形。 
ERROR level指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。 
FATAL level指出每個嚴重的錯誤事件將會導致應用程序的退出。 

2. 日誌信息的輸出目的地。在log4php中輸出目的地支持12種,分別為: 
代碼:

<?php 

1. LoggerAppenderConsole 以php://stdout為輸出地 
2. LoggerAppenderDailyFile 繼承自LoggerAppenderFile, 以文件為輸出地,每日輸出一個文件 
3. LoggerAppenderDb   以資料庫為輸出地 
4. LoggerAppenderEcho 在執行文件尾輸出 
5. LoggerAppenderFile 以文件為輸出地 
6. LoggerAppenderMail 以郵件為輸出地 
7. LoggerAppenderMailEvent 繼承自LoggerAppenderMail, 以郵件為輸出地, 為事件觸發 
8. LoggerAppenderNull: 不輸出任何信息 
9. LoggerAppenderPhp: 輸出至PHP錯誤信息,將各類日誌等級信息轉化為php標準信息 
10. LoggerAppenderRollingFile: 繼承自LoggerAppenderFile,以xxx.log.1, xxx.log.2的形式輸出, 
11. LoggerAppenderSocket: 以socket方式輸出 
12. LoggerAppenderSyslog: 以系統日誌為目的地輸出,使用php中的syslog()函數進行記錄 

?>  



在配置文件中表現為"log4php.rootLogger=DEBUG, A1" 從第二個參數起的別名,具體目的地的設置方式由: 
代碼:

<?php 

log4php.appender.A1=LoggerAppenderEcho 
log4php.appender.A1.layout=LoggerLayoutHtml 

?> 

 

來實現,每種輸出目的地都有不同的設置參數,根據實際需要,輸出的目的地可有多項,表現如下: 
log4php.rootLogger=DEBUG, A1, A2, A3, .... 
其中A1, A2, A3代表不同的輸出目的地。 

3. 日誌文件輸出格式。它作為輸出目的地的一個屬性存在,log4php上包含5種不同的輸出方式,分別為: 
代碼:

<?php 

1. LoggerLayoutHtml: 以html格式輸出調試信息 
2. LoggerLayoutSimple: 簡單的以 "等級信息 - 日誌信息"的格式顯示 
3. LoggerLayoutTTCC: 以"月/日/年 時間[進程] 等級信息 日誌名稱 - 調試信息"的格式來顯示 
4. LoggerPatternLayout: 以模式表達式作為輸出格式來顯示(這個功能極為強悍,你可以隨心所欲的來設置輸出格式,在實例部分詳細講解) 
5. LoggerXmlLayout: 以xml的模式來輸出 

?> 

 


這裡所謂的高級使用也就是log4php中的配置文件的使用,所有的高級功能都要由配置文件來完成,我每講一個功能的使用,都有一個示例文件,大家可以邊看教程邊進行調試, 在這裡我將以幾種常見的輸出目的地為例進行講解,詳細的內容大家可以查看log4php解壓目錄里的test目錄。 

1. LoggerAppenderEcho:定義方式: 
代碼:

<?php 
     
log4php.appender.A1=LoggerAppenderEcho 
log4php.appender.A1.layout=LoggerLayoutHtml 

?> 

 

log4php.appender是固定格式,A1代表輸出地的別名,log4php.appender.A1為輸出地,這裡為直接回顯,log4php.appender.A1.layout定義直接回顯時的格式,在這裡取值可以是5種輸出格式, 當前設置表示使用HTML來輸出DEBUG信息,當A1的layout配置為LoggerLayoutHtml后,它還有兩個附加參數可定義(請記住:這裡的參數指的是為LoggerLayoutHmtl設置為不是為LoggerAppenderEcho,是為輸出格式設置參數而不是為輸出目的地設置參數),分別為: 
1. locationInfo: 輸出本地信息,值為boolean 
2. title:輸出html的標題名,也就是輸出HTML中的<title></title>中的名稱, 字元串 

完整配置示例如下: 
代碼:

<?php 

log4php.rootLogger=DEBUG, A1 

log4php.appender.A1=LoggerAppenderEcho 

log4php.appender.A1.layout=LoggerLayoutHtml 
log4php.appender.A1.layout.locationInfo=true 
log4php.appender.A1.layout.title=這裡是測試實例1 

?> 
上一篇[隱殺]    下一篇 [《千與千尋》]

相關評論

同義詞:暫無同義詞