在开发环境中,打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
日志的记录方式默认是文件方式,能够经过驱动的方式来扩展支持更多的记录方式。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');