Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6540160
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Python/Ruby

2011-07-31 16:11:09

   log4php是apache的logging下的一个子项目,是log4j在php下的实现。log4j是apache项目下有名的日志记录组件,有针对比较流行的语言的实现,log4cxx,log4j,log4net,log4php等等。
   官方对log4php的介绍如下。

Apache log4php™ is a versatile logging framework for PHP.

Feature highlights:

  • Configuration through XML, properties or PHP files
  • Various logging destinations, including:
    • Console (stdout, stderr)
    • Files (including daily and rolling files)
    • Email
    • Databases
    • Sockets
    • Syslog
  • Several built-in log message formats, including:
    • HTML
    • XML
    • User defined pattern
  • Nested (NDC) and Mapped (MDC) Diagnostic Contexts.

  2009年log4php版推出2.0.0版本后,很长一段时间没有更新,最近更新到了2.1.0版本。下载地址在。2.1.0版本支持了对php的pear包的支持,可以将log4php功能集成到pear包中。

   我们下载的包解压,将src\main下的php目录拷贝到web文档目录,并重命名为log4php。

   写一个简单的测试例子: 

  1. <?php
  2. include('log4php/Logger.php');

  3. $logger = Logger::getLogger("main");
  4. $logger->info("foo");
  5. $logger->warn("bar");
  6. ?>

    在控制台(windows下用cmd命令执行)会看到如下的输出:

[quote]07/31/11 08:26:12,043 [496] INFO main - foo
07/31/11 08:26:12,047 [496] WARN main - bar[/quote]

   注意:你用浏览器打开,是看不到输出的,因为log4php的默认配置输出是到控制台。

   通过配置文件配置日志的输出,log4php.xml如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <log4php:configuration xmlns:log4php="">
  3.     <appender name="myAppender" class="LoggerAppenderFile"> <!-- 1 -->
  4.         <param name="file" value="myLog.log"/> <!-- 2 -->
  5.     </appender>
  6.     <root>
  7.         <level value="WARN" /> <!-- 3 -->
  8.         <appender_ref ref="myAppender" /> <!-- 4 -->
  9.     </root>
  10. </log4php:configuration>

配置文件说明:

1、创建一个LoggerAppenderFile,用于日志文件输出。

2、文件参数,用于日志输出的文件配置。

3、设置root的级别为WARN,低于WARN的日志不会输出。

4、root的日志输出连接到myAppender上。

测试程序如下:

  1. <?php
  2.     // Insert the path where you unpacked log4php

  3.     include('log4php/Logger.php');

  4.     // Tell log4php to use our configuration file.

  5.     Logger::configure('log4php.xml');

  6.     // Fetch a logger, it will inherit settings from the root logger

  7.     $log = Logger::getLogger('myLogger');

  8.     // Start logging

  9.     $log->trace("My first message."); // Not logged because TRACE < WARN

  10.     $log->debug("My second message."); // Not logged because DEBUG < WARN

  11.     $log->info("My third message."); // Not logged because INFO < WARN

  12.     $log->warn("My fourth message."); // Logged because WARN >= WARN

  13.     $log->error("My fifth message."); // Logged because ERROR >= WARN

  14.     $log->fatal("My sixth message."); // Logged because FATAL >= WARN

  15. ?>

我们看到myLog.log文件中输出如下信息:

WARN - My fourth message.
ERROR - My fifth message.
FATAL - My sixth message.

比WARN级别低的日志没有输出。

更高级一点的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <log4php:configuration xmlns:log4php="">
  3.     
  4.     <appender name="myConsoleAppender" class="LoggerAppenderConsole" />
  5.     
  6.     <appender name="myFileAppender" class="LoggerAppenderFile">
  7.                 <layout class="LoggerLayoutTTCC" />
  8.         <param name="file" value="myLog.log" />
  9.     </appender>

  10.     <logger name="Foo">
  11.         <appender_ref ref="myFileAppender" />
  12.     </logger>
  13.     
  14.     <root>
  15.         <level value="DEBUG" />
  16.         <appender_ref ref="myConsoleAppender" />
  17.     </root>
  18. </log4php:configuration>

在这个配置文件中,

  • named loggers
  • using layouts
  • best practices in object-oriented programming
  • 通过测试文件如下:

    1. <?php
    2.     include('log4php/Logger.php');

    3. Logger::configure('D:\log4php.xml');

    4. /**
    5.  * This is a classic pattern: using one logger object per class.
    6.  */
    7. class Foo
    8. {
    9.     /** Holds the Logger. */
    10.     private $log;

    11.     /** Logger is instantiated in the constructor. */
    12.     public function __construct()
    13.     {
    14.         // The __CLASS__ constant holds the class name, in our case "Foo".

    15.         // Therefore this creates a logger named "Foo" (which we configured in the config file)

    16.         $this->log = Logger::getLogger(__CLASS__);
    17.     }

    18.     /** Logger can be used from any member method. */
    19.     public function go()
    20.     {
    21.         $this->log->info("We have liftoff.");
    22.     }
    23. }

    24. $foo = new Foo();
    25. $foo->go();
    26. ?>

    下面的信息将会输出在控制台:

    INFO - We have liftoff.

    下面的信息将输出在myLog.log文件中:

    01/06/11 18:43:39,545 [5428] INFO Foo - We have liftoff.

    注意文件输出的不同,因为在文件appender中使用了LoggerLayoutTTCC这个Layout。

    PS:在Linux下要注意输出日志的目录,apache用户有权限写入。

    还可以采用properties的形式配置,或者php文件。更多的资料可以参照apache官方网站。

    阅读(3677) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~