关键是两个,1是修改配置文件,指定自定义的驱动。2是自定义驱动的save方法
直接上代码
config/log.php
<?php
// +----------------------------------------------------------------------
// | 日志设置
// +----------------------------------------------------------------------
return [
// 默认日志记录通道
'default' => env('log.channel', 'file'),
// 日志记录级别
'level' => [],
// 日志类型记录的通道 ['error'=>'email',...]
'type_channel' => [],
// 关闭全局日志写入
'close' => false,
// 全局日志处理 支持闭包
'processor' => null,
//ThinkPHP对系统的日志按照级别来分类记录,按照PSR-3日志规范,日志的级别从低到高依次为: debug, info, notice, warning, error, critical, alert, emergency,ThinkPHP额外增加了一个sql日志级别仅用于记录SQL日志(并且仅当开启数据库调试模式有效)。
// 日志通道列表
'channels' => [
'file' => [
// 日志记录方式
//'type' => 'File',
'type' => '\app\driver\log\Tp6Log',
// 日志保存目录
'path' => '',
// 单文件日志写入
'single' => false,
// 独立日志级别
'apart_level' => ['error', 'sql','user','fun','pay','refund','order','cancelBadOrder','ar','job'],
// 最大日志文件数量
'max_files' => 0,
// 使用JSON格式记录
'json' => false,
// 文件大小
'file_size' => 1024*1024*2,
// 日志处理
'processor' => null,
// 关闭通道日志写入
'close' => false,
// 日志输出格式化
'format' => '[%s][%s] %s',
// 是否实时写入
'realtime_write' => true,
],
// 其它日志通道配置
],
];
app\drive\log\Tp6Log.php
<?php
declare (strict_types=1);
namespace app\driver\log;
use DateTime;
use DateTimeZone;
use Exception;
use think\App;
use think\contract\LogHandlerInterface;
use think\facade\Request;
/**
* 本地化调试输出到文件
*/
class Tp6Log implements LogHandlerInterface
{
/**
* 配置参数
* @var array
*/
protected $config = [
'time_format' => 'c',
'single' => false,
'file_size' => 2097152,
'path' => '',
'apart_level' => [],
'max_files' => 0,
'json' => false,
'json_options' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
'format' => '[%s][%s] %s',
];
protected $app;
// 实例化并传入参数
public function __construct(App $app, $config = [])
{
$this->app = $app;
if (is_array($config)) {
$this->config = array_merge($this->config, $config);
}
if (empty(

本文展示了如何在ThinkPHP框架中自定义日志驱动,通过修改配置文件指定自定义驱动`Tp6Log`,该驱动在记录日志时会包含请求信息、时间戳以及SQL等详细日志,并能按日志类型分别记录到不同的文件中,便于后期分析和调试。
最低0.47元/天 解锁文章
6083





