您的位置:首页 > 编程语言 > PHP开发

使用log4php 的 debug 你的php程序

2009-08-06 16:21 495 查看
http://hi.baidu.com/qiaoyuetian/blog/item/a3e6de4cbad8b9f0d62afc64.html

使用log4php 的 debug 你的php程序

使用java的人估计都知道log4j(我只是听过,虽然appfuse中集成了,但是没有去探究过)
而log4php就是专门给php deug用的。
使用非常方便。
----------------------项目地址
http://logging.apache.org/log4php/
-----------------------
使用的话:
1 建立一个log4php.properties文件,文件内容:
#Bof:-----------------适用于0.9beta
log4php.appender.default=LoggerAppenderRollingFile
log4php.appender.default.MaxFileSize=10MB
log4php.appender.default.MaxBackupIndex=5
log4php.appender.default.layout=LoggerPatternLayout
log4php.appender.default.File=./project.log
log4php.appender.default.layout.ConversionPattern="%d %-5p: %m (%F:%L)%n"
//log4php.rootLogger=fatal, default
//log4php.rootLogger=error, default
//log4php.rootLogger=warn, default
//log4php.rootLogger=info, default
log4php.rootLogger=debug, default
#Eof:-----------------
如果是0.8beta,可以采用以下
#Bof:0.8---------------
log4php.appender.A2=LoggerAppenderRollingFile
log4php.appender.A2.MaxFileSize=10MB
log4php.appender.A2.MaxBackupIndex=5
log4php.appender.A2.layout=LoggerLayoutTTCC
log4php.appender.A2.layout.ContextPrinting="true"
log4php.appender.A2.layout.DateFormat="%c"
log4php.appender.A2.File=./c3crm.log
log4php.rootLogger=fatal, A2
//log4php.rootLogger=error, A2
//log4php.rootLogger=warn, A2
//log4php.rootLogger=info, A2
//log4php.rootLogger=debug, A2
#Eof:0.8---------------
2 根据自己的需要在debug页面中加入
require_once('log4php/LoggerManager.php');
$GLOBALS['log'] = LoggerManager::getLogger('project');
然后就可以直接使用 $GLOBALS['log']的debug,info,warn,error等方法来debug你的程序。
3 至于察看,可以使用tail -f project.log | grep DEBUG/INFO/WARN等来察看相关的内容。
注意:0.9版本中有个错漏的地方,如果使用以上的properties设置,你会发现文件位置和行数显示的时候为 NA:NA,原因是代码中有错漏,只需要修改
log4php/spi/LoggerLocationInfo.php 189和190行
189 $className = @$hop['class'];
190 if ( !empty($className) and ($className == 'logger' or get_parent_class($className) == 'logger') )
更改为以下:
189 $className = @strtolower($hop['class']);
190 if ( !empty($className) and ($className == 'logger' or $className == 'loggercategory' or get_parent_class($className) == 'logger') or get_parent_class($className) == 'loggercategory')
即可显示你所需要的东西,非常方便,非常傻瓜化:)

===============================================================

什么是log4php
2009-07-15 20:29
log4php0.9的详细配置实例说明

一、什么是log4php:
log4j在JAVA中可算是大名鼎鼎的日志开发包了,它为apche组织维护项目,VxR兄使用php来实现了log4j的功能, 目前log4php已经作为log4j的一个子项目存在,详细信息可点击:http://logging.apache.org/log4php/进行查 看,另外VxR兄的log4php官方主站为:http://www.vxr.it/log4php/,有兴趣的朋友可直接点上边两个网址查看详细信息。
下载地址:http://www.vxr.it/log4php/download.html

二、安装:
本文下载版本为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 = "here is test string!";

/*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的值不为空! 它的值为: 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

?>

本节实例为log_echo.php.

转自:http://hi.baidu.com/gongbao/blog/item/77a08f2b9bce9dfce7cd40ec.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: