默认通道
通过设置default参数定义日志的默认通道,例如:
'default'=>'file',
级别通道
可以设置不同的日志级别使用不同的日志通道。
'type_channel'=>[ // 对于error日志级别 同时写入file和email两个日志通道 'error'=>['file','email'], ]
设置了级别通道后,该级别的日志不会记录到默认通道,请注意。
日志通道需要日志驱动的配合,你也可以自定义日志驱动。
切换通道
你也可以手动切换当前的日志的默认写入通道,例如:
Log::channel('email')->info('这是日志信息');
支持切换使用多个通道记录,例如:
Log::channel(['email', 'file'])->info('这是日志信息');
日志处理
日志写入支持事件监听,例如:
Event::listen('thinkeventLogWrite', function($event) { if('file' == $event->channel) { $event->log['info'][] = 'test info'; } });
闭包的参数是LogWrite事件类对象实例,你可以获取两个属性:
日志信息是一个二维数组,包含了当前日志通道下(允许记录的)所有级别的日志信息。
格式化日志信息
系统提供了两个参数用于日志信息的格式化,第一个是用于自定义时间显示格式的time_format,第二个是调整日志输出格式的format参数。
'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, 'time_format' => 'Y-m-d H:i:s', 'format' => '[%s][%s]:%s', ], ],
format参数的第一个%s是日志记录时间(日志时间的格式化由time_format参数定义) 第二个%s是日志级别 第三个%s是日志信息,顺序不能调整。
JSON格式日志
可以支持JSON格式记录文件日志,更加方便一些第三方日志分析工具进行日志分析。
在日志配置文件中,添加
return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'json' =>true 'file_size' => 1024*1024*10, ], ], ];
即可开启JSON格式记录,CLI命令行的日志记录同样有效。
和之前版本的区别在于,新版的每个日志信息都是一条JSON数据(旧版本是每个请求一条JSON数据)。
关闭日志
你可以通过调用close方法动态关闭日志写入。
// 关闭全局日志写入 Log::close(); // 关闭某个通道日志写入 Log::close('file');
如果调用close方法动态关闭日志,会自动调用clear方法清空日志。
清空日志
一旦执行save方法后,内存中的日志信息就会被自动清空,如果需要提前清空日志可以使用:
// 清空所有日志 Log::clear(); //清空通道日志可以使用 Log::clear('file');
在清空日志方法之前,你可以使用getLog方法获取内存中的日志。
// 获取(默认通道)日志 $logs = Log::getLog(); // 获取指定通道日志 $logs = Log::getLog('file');
日志清空仅仅是清空内存中的日志。
自定义驱动
日志通道需要自定义日志驱动,该日志驱动需要实现thinkcontractLogHandlerInterface接口。
interface LogHandlerInterface { /** * 日志写入接口 * @access public * @param array $log 日志信息 * @return bool */ public function save(array $log): bool; }
众多ThinkPHP教程,尽在PHP中文网,欢迎在线学习!
本文转自:https://blog.thinkphp.cn/1186947