thinkphp配置log4php

来源:互联网 发布:新密传挂机软件 编辑:程序博客网 时间:2024/06/07 11:36

log4php

log4php作为apache维护的项目, 是apache为PHP制定的日志输出工具。目前log4php已经作为log4j的一个子项目存在。利用log4php我们能很好的管理日志信息。

下载:
log4php官网下载地址
官方文档API

最新版本为2.3.0, 笔者这里采用的也是这个版本。

目录结构

解压后定位到 该目录的 src/main/php 下, 将该目录下的所有文件复制到你的项目中, 即你项目中的thinkphp框架下的Library/Vendor下, 新建文件夹log4php, 我的如下所示:

这里写图片描述

由于log4php的所有文件都以.php为类文件后缀,也没用采用命名空间的话, 故可以把该第三方包放在框架的Vendor目录下, 方便使用vendor 函数引入。

配置

在你的项目根目录下建立log4php的配置文件, 该处采用xml的方式经行配置, .properties的方式官方也弃用在后期版本也不承认更新。

This format has been deprecated. Support will not be removed for the foreseeable future, however it may not be updated to include newly introduced features. It is recommended that you use either the XML or PHP configuration format.

我的配置文件如下: log4php.xml

<?xml version="1.0" encoding="UTF-8"?><configuration xmlns="http://logging.apache.org/log4php/">    <!-- 标准控制台输出的appender -->    <appender name="STDOUT" class="LoggerAppenderConsole">        <param name="threshold" value="debug"/>        <layout class="LoggerLayoutPattern" >            <param name="conversionPattern" value="[%date{Y-m-d H:i:s,u}] [%t] %-5p %l - %message%newline%ex"/>        </layout>    </appender>    <!-- 记录所有ERROR日志的appender -->    <appender name="ERROR-ALL" class="LoggerAppenderDailyFile">        <layout class="LoggerLayoutPattern" >            <param name="conversionPattern" value="[%date{Y-m-d H:i:s,u}] [%t] %-5p %l - %message%newline%ex"/>        </layout>        <param name="file" value="log/php-error.log.%s" />        <param name="threshold" value="error"/>        <param name="append" value="true" />        <param name="datePattern" value="Y-m-d" />    </appender>    <!-- 输出debug级别的信息, 这个一般不用写入到文件 -->                                                                                                                                                                                                                                                                                                                                                                       <!-- 记录所有DEBUG日志的appender     <appender name="DEBUG-ALL" class="LoggerAppenderDailyFile">        <layout class="LoggerLayoutPattern" >            <param name="conversionPattern" value="[%date{Y-m-d H:i:s,u}] [%t] %-5p %l - %message%newline%ex"/>        </layout>        <param name="file" value="log/php-debug.log.%s" />        <param name="threshold" value="debug"/>        <param name="append" value="true" />        <param name="datePattern" value="Y-m-d" />    </appender>-->    <!-- 记录所有INFO日志的appender -->    <appender name="INFO-ALL" class="LoggerAppenderDailyFile">        <layout class="LoggerLayoutPattern" >            <param name="conversionPattern" value="[%date{Y-m-d H:i:s,u}] [%t] %-5p %l - %message%newline%ex"/>        </layout>        <param name="file" value="log/php-info.log.%s" />        <param name="threshold" value="info"/>        <param name="append" value="true" />        <param name="datePattern" value="Y-m-d" />    </appender>    <root>        <level value="info"/>        <appender-ref ref="STDOUT"/>        <!--  <appender-ref ref="DEBUG-ALL"/>-->        <appender-ref ref="INFO-ALL"/>        <appender-ref ref="ERROR-ALL"/>    </root></configuration>

该博文参考配置checkhere

说明:

Appenders的name为自定义的, class属性为下表所示:

类 描述 LoggerAppenderConsole 以php://stdout为输出地 LoggerAppenderEcho 在执行文件尾输出 LoggerAppenderDailyFile 每天重新输出一个文件 LoggerAppenderFile 已一个文件输出 LoggerAppenderRollingFile 以xxx.log.1, xxx.log.2的形式输出, LoggerAppenderMail 以邮件为输出地 LoggerAppenderMailEvent 通过电子邮件发送日志消息。每个日志条目在个人电子邮件发送。 LoggerAppenderMongoDB MongoDB. LoggerAppenderNull 不输出任何信息 LoggerAppenderPDO Database. LoggerAppenderPhp 使用PHP创建一个PHP用户级消息trigger_error()函数。 LoggerAppenderSocket 以socket方式输出 LoggerAppenderSyslog 以系统日志为目的地输出,使用php中的syslog()函数进行记录


layout配置的是日志输出的方式, log4php提供了5中输出方式

Tables Are LoggerLayoutHtml 以html格式输出调试信息 LoggerLayoutSimple 简单的以 “等级信息 - 日志信息”的格式显示 LoggerLayoutTTCC 以”月/日/年 时间[进程] 等级信息 日志名称 - 调试信息”的格式来显示 LoggerPatternLayout 以模式表达式作为输出格式来显示(这个功能极为强悍,你可以随心所欲的来设置输出格式,在实例部分详细讲解) LoggerXmlLayout 以xml的模式来输出


param配置说明

<param name="file" value="log/php-error.log.%s" /><param name="threshold" value="error"/><param name="append" value="true" /><param name="datePattern" value="Y-m-d" />

测试

在thinkphp默认访问的方法里测试代码, 我的默认访问路径为App/Home/Controller/IndexController.class.php/index

<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller {    function _initialize(){        //采用Vendor直接引入log4php目录下的Logger文件        Vendor('log4php.Logger');        //引入配置文件        \Logger::configure(HOME_PATH.'/log4php.xml');        //获取log的对象, 参数是一个名字, 没有时会自动创建, 我传入的是类名        $log = \Logger::getLogger('IndexController');        $log->info('来, 以钱赚钱了');        //$log->warn('来, 以钱赚钱了');        //$log->debug('来, 以钱赚钱了');        //$log->error('来, 以钱赚钱了');        //$log->fatal('来, 以钱赚钱了');    }    public function index(){        //$this->display();    }}

项目入口文件

//当前项目据对路径define('HOME_PATH', getcwd() . '/');define("APP_PATH", "./App/");define("RUNTIME_PATH", "./Runtime/");require './think/ThinkPHP.php'; 

Log4php由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;
日志信息的输出目的地指定了日志将附加到执行文件尾还是文件中;
而输出格式则控制了日志信息的显示内容。

优先级 由低到高: debug、 info、warn、 error、 fatal, 日志的输出和你的等级设置相关,比如上面的配置文件,root 下的 level = debug那么所有的等级都会出现日志,但是日志文件的数量是不等的

这里我把日志的等级配置成info级别的了

<root>        <!-- 制定日志的级别为info -->        <level value="info"/>        <appender-ref ref="STDOUT"/>        <!--  <appender-ref ref="DEBUG-ALL"/>-->        <appender-ref ref="INFO-ALL"/>        <appender-ref ref="ERROR-ALL"/>    </root>

当 level value=”info”设置为info时,由于:优先级由低到高: debug、 info、warn、 error、 fatal 当调用

$log->info('来, 以钱赚钱了');    //会写入日志文件//$log->warn('来, 以钱赚钱了');  //会写入日志文件//$log->debug('来, 以钱赚钱了'); // 不会 写入日志文件//$log->error('来, 以钱赚钱了'); //会写入日志文件//$log->fatal('来, 以钱赚钱了'); //会写入日志文件

即调用:

  • debug 不会产生文件,
  • info会生成php-info.log***
  • warn 生成两个文件:php-debug.log*** php-info.log***
  • errror、fatal会产生三个文件:php-debug.log*** php-error.log*** php-info.log***

由于博主该接触log4php不足3个小时, 若有错误或误导之处还请指出, 共求进步!!


博文参考地址
checkhere2
checkhere1

1 0
原创粉丝点击