ThinkPHP手动写入日志

    在开发环境中,打log是很是必须的,特别是在走前端开发的异步请求,异步请求不少时候打log是比较麻烦的,不是将错误信息返回前端的js用console来输出或者alert或者document.write,除了console还算不错外其余的方法都是会终端进程,不能作到静默的大log,而就算是console也是有不便之处。好比说,异步的话,原本就是会返回信息的(大多数状况下),再返回错误信息,而后再在ajax的代码中输出错误信息,这样作就要修改代码,改来改去,注释来注释去,非常麻烦(一次两次还好)。我的认为应对这种状况最好的打log方法就是在后端中打log。php

    在原生的php开发环境中,能够本身写一个写入文件的函数或者类来打log。在ThinkPHP是有提供打log的封装方法的,它本身也会自动记录运行日志,也能够手动打log,另外本身封装的方法或者类的话,当放到生产环境上,还可能会有读写权限问题,这是你又要用命令去给予日志文件的读写权限(若是只是一次两次还好,然而开发都是要迭代至关多的版本的),分享一下这种方法:前端

 

先来个简单版的:ajax

<?php
namespace Home\Controller;
use Think\Controller;
use Think\Log;  //1.使用Log类的命名空间

class IndexController extends Controller {
    public function index(){
		Log::write("尼玛这原来是日志2423424");  //2.调用Log的write方法实时进行日志写入
    	$this->display();
    }
}

你能够在下面的目录中找到你的日志:后端




下面是ThinkPHP的官方手册详细解析(懒人的话,上面的简单版就够用了):异步

日志记录

其中,为了性能考虑,SQL日志级别必须在调试模式开启下有效,不然就不会记录。 系统的日志记录由核心的Think\Log类及其驱动完成,提供了多种方式记录了不一样的级别的日志信息。函数

默认状况下只是在调试模式记录日志,要在部署模式开启日志记录,必须在配置中开启LOG_RECORD参数,以及能够在应用配置文件中配置须要记录的日志级别,例如:性能

'LOG_RECORD' => true, // 开启日志记录
'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

日志的记录并不是实时保存的,只有当当前请求完成或者异常结束后才会实际写入日志信息,不然只是记录在内存中。测试

日志级别

ThinkPHP对系统的日志按照级别来分类,包括:this

  • EMERG 严重错误,致使系统崩溃没法使用
  • ALERT 警惕性错误, 必须被当即修改的错误
  • CRIT 临界值错误, 超过临界值的错误
  • ERR 通常性错误
  • WARN 警告性错误, 须要发出警告的错误
  • NOTICE 通知,程序能够运行可是还不够完美的错误
  • INFO 信息,程序输出信息
  • DEBUG 调试,用于调试信息
  • SQL SQL语句,该级别只在调试模式开启时有效

记录方式

日志的记录方式默认是文件方式,能够经过驱动的方式来扩展支持更多的记录方式。spa

记录方式由LOG_TYPE参数配置,例如:

'LOG_TYPE'              =>  'File', // 日志记录类型 默认为文件方式

File方式记录,对应的驱动文件位于系统的Library/Think/Log/Driver/File.class.php

手动记录

通常状况下,系统的日志记录是自动的,无需手动记录,可是某些时候也须要手动记录日志信息,Log类提供了3个方法用于记录日志。

方法 描述
Log::record() 记录日志信息到内存
Log::save() 把保存在内存中的日志信息(用指定的记录方式)写入
Log::write() 实时写入一条日志信息

因为系统在请求结束后会自动调用Log::save方法,因此一般,你只须要调用Log::record记录日志信息便可。

record方法用法以下:

Think\Log::record('测试日志信息');

默认的话记录的日志级别是ERR,也能够指定日志级别:

Think\Log::record('测试日志信息,这是警告级别','WARN');

record方法只会记录当前配置容许记录的日志级别的信息,若是应用配置为:

'LOG_LEVEL'  =>'EMERG,ALERT,CRIT,ERR', // 只记录EMERG ALERT CRIT ERR 错误

那么上面的record方法记录的日志信息会被直接过滤,或者你能够强制记录:

Think\Log::record('测试日志信息,这是警告级别','WARN',true);

采用record方法记录的日志信息不是实时保存的,若是须要实时记录的话,能够采用write方法,例如:

Think\Log::write('测试日志信息,这是警告级别,而且实时写入','WARN');
相关文章
相关标签/搜索