log4php

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

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

一、什麼是log4php:

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

二、安裝:

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

三、開始使用:

先從最簡單的來,先來看看test1.php中的內容:
代碼:
<?php
/*1*/define(LOG4PHP_DIR,"log4php");
/*2*/require_once(LOG4PHP_DIR.'/LoggerManager.php');
/*3*/$str="hereisteststring!";
/*4*/echo"這裡是PHP的輸出,與log4php無關喲!<br>";
/*5*/$logger=LoggerManager::getLogger('test');
/*6*/if(""!=$str){
$logger->debug("str的值不為空!它的值為:".$str."<br>");
}
/*7*/if(strlen($str)>4){
$logger->debug("str的長度大於4!"."<br>");
}
/*8*/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的值不為空!它的值為:hereisteststring!
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("errormessagehere!"))及WARN等級的信息可以記錄出來,而程式中所有使用INFO與DEBUG級的信息都將不顯示,它由
"log4php.rootLogger=DEBUG,A1"中rootLogger的第一個參數定義,這一句的意思是將調試等級定義為DEBUG級,也就是說程式中所有的ERROR,WARN,INFO,DEBUG信息都可以顯示出來,如果將等級設定為INFO,那么只能有ERROR,WARN,INFO這三種信息可顯示。
以下是常用四種等級的用法:
DEBUGLevel指出細粒度信息事件對調試應用程式是非常有幫助的。
INFOlevel表明訊息在粗粒度級別上突出強調應用程式的運行過程。
WARNlevel表明會出現潛在錯誤的情形。
ERRORlevel指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
FATALlevel指出每個嚴重的錯誤事件將會導致應用程式的退出。
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
?>

相關詞條

熱門詞條

聯絡我們