日志记录由 `\think\Log`类完成。
## 日志初始化
在使用日志记录之前,首先需要初始化日志类,指定当前使用的日志记录方式。
~~~
\think\Log::init(['type'=>'File','path'=>APP_PATH.'logs/']);
~~~
上面在日志初始化的时候,指定了文件方式记录日志,并且日志保存目录为`APP_PATH.'logs/'`。
> 不同的日志类型可能会使用不同的初始化参数。
## 日志级别
ThinkPHP对系统的日志按照级别来分类,并且这个日志级别完全可以自己定义,系统内部使用的级别包括:
* **log** 常规日志,用于记录日志
* **error** 错误,一般会导致程序的终止
* **notice** 警告,程序可以运行但是还不够完美的错误
* **info** 信息,程序输出信息
* **debug** 调试,用于调试信息
* **sql** SQL语句,用于SQL记录,只在数据库的调试模式开启时有效
## 记录方式
日志的记录方式默认是文件方式,可以通过驱动的方式来扩展支持更多的记录方式。
记录方式由`log.type`参数配置,例如:
~~~
'log' => [
'type' => 'File',
'path' => LOG_PATH,
],
~~~
> File方式记录,对应的驱动文件位于系统的`library/think/log/driver/File.php`。
## 手动记录
一般情况下,系统的日志记录是自动的,无需手动记录,但是某些时候也需要手动记录日志信息,Log类提供了3个方法用于记录日志。
| 方法 | 描述 |
| --- | --- |
| Log::record() | 记录日志信息到内存 |
| Log::save() | 把保存在内存中的日志信息(用指定的记录方式)写入 |
| Log::write() | 实时写入一条日志信息 |
由于系统在请求结束后会自动调用Log::save方法,所以通常,你只需要调用Log::record记录日志信息即可。
record方法用法如下:
~~~
\think\Log::record('测试日志信息');
~~~
默认的话记录的日志级别是INFO,也可以指定日志级别:
~~~
\think\Log::record('测试日志信息,这是警告级别','notice');
~~~
采用record方法记录的日志信息不是实时保存的,如果需要实时记录的话,可以采用write方法,例如:
~~~
\think\Log::write('测试日志信息,这是警告级别,并且实时写入','notice');
~~~
## 日志写入
日志可以通过驱动支持不同的方式写入,默认日志会记录到文件中,系统已经支持的写入方式包括 `File/Sae/Socket`,如果要使用Socket方式写入,可以设置:
~~~
'log' => [
'type' => 'socket',
'host' => 'slog.thinkphp.cn',
//日志强制记录到配置的client_id
'force_client_ids' => [],
//限制允许读取日志的client_id
'allow_client_ids' => [],
],
~~~
Socket驱动采用了SocketLog类库,更多的关于SocketLog的资料请参考调试章节。
## 异常通知
当发生异常的情况下,可以设置是否发送通知,要启用该功能,首先需要设置通知参数,在应用的公共文件添加如下代码:
~~~
// 设置异常通知方式 采用邮件发送
\think\Log::alarm(['type'=>'email','address'=>'thinkphp@q.com']);
~~~
可以通过添加驱动支持其他的通知方式。