日期:2014-05-17 浏览次数:20760 次
一、什么是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]
<?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();
?>
[/php]
程序非常简单,来看看各处标记的作用:
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
[/php]
先不用管这些代码是什么意思,在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!
[/php]
看到这里,有人就会说了,为什么上边会有两个注意的地方?我想把文件名改成log4.txt, 同时为了方便我还要把它的位置放在另一个地方,比如我的项目中有一个专门的配置文件目录config/,我想把log4.txt放在config/目录中, OK, 可以, 如果你这样做了,那么在test1.php中还需要在1处后边加一条语句:
[php]
define (LOG4PHP_CONFIGURATION, "/config/log4.txt");
[/php]
这里要说明的一定,因为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. LoggerAppe