ThinkPHP教程_PHP框架之ThinkPHP(四)【调试模式与日志记录】

1、调试模式php

  开启调试模式后,能够看到更加详细的错误信息,调试模式的做用的在于显示或者记录更多的日志信息,以便在开发过程当中快速定位和解决问题html

  只须要在项目配置文件中添加一个'APP_DEBUG'=>true,便可开启web

  一、开启调试模式后,系统在运行时会首先检查是否认义了项目调试配置文件,若是没有定义则使用系统调试配置文件(这是ThinkPHP为咱们定义好的),系统调试配置文件为系统目录->Common->debug.php文件sql

  

  二、在系统调试配置文件中,'DB_FIELDS_CACHE'=>false 即关闭数据表字段缓存,由于在调试模式下考虑到数据表结构会常常变更,因此默认只要开启调试模式就关闭数据表字段缓存数据库

  所谓数据表字段缓存,就是ThinkPHP会将整个应用所涉及的表的结构都缓存到应用目录->Runtime->Data->_files目录中,每张表对应一个php文件,文件名就是表名,文件内容是一个记录该表字段信息的数组!也就是说若是开启了该缓存,那么在直接对数据库中的表结构进行的修改是不会反映到表结构缓存文件的,而在用Model对表进行操做的时时是根据表结构缓存文件中的结构信息来的,因此会致使好比新加的一个字段插入不进去数据的问题数组

  关于数据表结构缓存,这里有一个连接浏览器

  三、项目调试配置文件缓存

  在应用目录->Config目录下新建一个debug.php文件,内容格式按照系统调试配置文件,最好是将系统调试配置文件的内容copy过来,而后再对其进行删除、增长或修改函数

  不论是否开启调试模式,都会加载项目配置文件(显然是的,不先加载项目配置文件,怎么知道是否开启了调试模式呢?对吧),若是没有开启调试模式则不会加载调试配置文件(系统/项目调试配置文件)的,并且调试配置文件(系统/项目)会覆盖项目配置文件中的相同项测试

  文件加载顺序(很重要)以下

  系统配置文件---》项目配置文件---》系统调试配置文件              PS,注意,要么是加载系统调试配置文件,要么加载项目调试配置文件,并不会像配置文件

                 ---》项目调试配置文件        那样,首先加载系统配置文件再加载项目配置文件

  四、运行状态

  开启调试模式后,默认会显示页面的运行状态信息,包括运行时间数据库读写次数缓存读写次数内存开销,例如

  

  而运行状态信息并不是必须得在调试模式下才能显示,也是能够直接在项目配置文件中进行单独配置的,能够配置一项或多项

  

  注意,这些信息默认是在模板的最后显示的,可是若是你但愿在模板其它地方显示,那么能够经过将{__RUNTIME__}等等模板系统变量放到指定的位置显示

  五、页面Trace

  页面Trace是ThinkPHP用于开发调试的辅助手段,在系统调试配置文件中是默认开启的

  

    ·默认的Trace信息包括以下项

    

    ·还能够自定义Trace信息

    方式一:在应用目录->Config目录下新建一个trace.php文件,内容格式与项目配置文件同样(返回一个Aarry),好比

    

    

    方式二:在动做内经过trace()方法来增长trace信息

    

    

  Trace模板也是能够自定义的,上面所说的是自定义Trace信息,在自定义的Trace模板中的关键性代码以下

  

  默认的Trace模板是系统目录->Tpl目录->PageTrace.tpl.php文件,经过在项目配置文件中的'TMPL_TRACE_FILE'配置项进行配置,好比说'TMPL_TRACE_FILE'=>APP_PATH.'/Public/trace.php',那么项目目录->Public目录->trace.php文件就是自定义的Trace模板

  六、手动输出调试信息(Action调试)

  有时候调试模式并不能彻底知足咱们的需求,而须要手动输出一些调试信息

    ·手动输出变量信息

    除了使用PHP内置的var_dump()函数和print_r()函数以外,还可使用ThinkPHP提供的对浏览器更加友好的dump()函数

    ·获取某代码段的运行状态

    debug_start($label='')debug_end($label='')函数,好比说

    

    

 

    ·中断程序执行并输出相关信息

    halt($mes);输出错误信息并终止程序执行

  七、模型调试(Model调试)

  在模型中,为了更好的查明错误,常常须要查看下最近使用的sql语句,那么ThinkPHP就提供了getLastsql()方法来输出上次执行的sql语句

  

  输出结果为 SELECT * FROM think_user  WHERE id = 1

  八、调试类

  更加高级的调试方式是使用调试类Debug,分别有三个静态方法mark()useTime()useMemory(),做用分别为标记一个调试位置返回区间所用时间返回区间所用内存,测试以下

  

  

  实际上,细心的同窗可能发现用debug_start()和debug_end()所测试的相同代码,在执行时间和使用内存上更小

  注意一下,经过Debug类的源码可知,useTime()实际上还有第三个参数

  

2、日志记录

  日志的处理工做是由系统自动完成的,在开启日志记录的状况下,会记录容许的日志级别的全部日志信息。其中SQL级别日志只有在调试模式开启时才有效!

  系统的日志记录由核心的Log类完成,提供了多种方式记录下不一样的级别的日志信息

  一、开启日志记录

  在项目配置文件中,添加'LOG_RECORD'=>true便可开启日志记录。通常在开启日志记录以后,紧接着要指定运行记录的日志级别,经过'LOG_RECORD_LEVEL'=>array('日志级别',...)

  二、日志级别

  

  ps,在项目配置文件中指定日志级别的时候,填的是字串而不是常量名

  三、日志记录方式(自动记录)

    SYSTEM  经过发送到PHP的系统日志目录    Log类中对应的常量名值是0

    MAIL     经过邮件方式发送                       1

    TCP       经过TCP方式发送                                                            2

    FILE    经过文件方式记录(默认方式)                                               3

  FILE方式的文件格式

  年(简写)_月_日.log 好比16_08_23.log表示2016年8月23日的日志文件

  这里所说的都是自动记录日志,自动记录的日志会保存到应用目录->Runtime目录->Logs目录->年(简写)_月_日.log文件

    ·能够经过LOG_FILE_SIZE来限制日志文件的大小,超过大小的日志文件就会造成备份文件,备份文件的格式是在当前文件名的前面加上备份的时间戳,例如1189571417-07_09_12.log 

    ·日志文件的内容格式是[时间]日志级别:日志信息

    ·时间显示格式可动态配置,默认采用的[c],能够改为例如Log::format='[Y-m-d H:i:s]',ps,格式与date()函数的用法一致

  四、手动记录

  一般日志文件的写入都是自动完成的,若是须要在开发的过程当中手动记录日志信息,能够经过Log类来实现

  有两种方式

  方式一:直接使用Log::write()方法一步到位

  

  方式二:先使用Log::record()方法将日志写入到内存中,而后再用Log::save()方法将内存中的日志写到磁盘中

相关文章
相关标签/搜索