thinkphp5 日志操作

/ 0评 / 0

日志写入数据库

Thinkphp5默认把日志信息保存在Runtime/log目录下,如果我们是多个Web服务器同时做负载均衡,那么就需要把日志集中保存到一台日志服务器中。Tp5作者已经考虑到了这点,我们只需要去写一个保存类,然后将tp5默认配置的File驱动修改为定义好的类,这样就可以更换tp5给我们默认提供的文件保存类。
先改一下配置文件 config.php 里的驱动类

    'log' => [
        // 日志记录方式,内置 file socket 支持扩展
		// 'type'  => 'File',
        'type'  => '\\log\\Mysql',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => [],
    ],

编写驱动类

db = Db::connect([
            // 数据库类型
            'type'            => 'mysql',
            // 服务器地址
            'hostname'        => '127.0.0.1',
            // 数据库名
            'database'        => 'thinkphp5',
            // 用户名
            'username'        => 'root',
            // 密码
            'password'        => 'toor',
            // 端口
            'hostport'        => '3306',
            // 数据库编码默认采用utf8
            'charset'         => 'utf8',
        ]);
    }

    /**
     * 日志写入接口
     * @access public
     * @param array $log 日志信息
     * @return bool
     */
    public function save(array $log = [])
    {
        $logArr = [];
        foreach ($log as $type => $msgArr){
            foreach ($msgArr as $msg){
                $logArr[] = [
                    "type" => $type,
                    "msg"  => $msg,
                    "addtime" => date("Y-m-d H:i:s"),
                ];
            }
        }
//        dump($logArr);
        $result = $this->db->table("logs")->insertAll($logArr);
        dump($result);
        return true;
    }
}

数据库表自己创建,就三个字段 "type","msg" ,"addtime"
然后就可以使用了


当然也可以修改驱动类来存储到别的介质中,如redis

日志授权/过滤

在项目上线运行后,每天都会有大量的无用的日志保存在本地,这个无用的日志信息既占用了我们宝贵的服务器资源,又给我们的运维工作带来不便。在Thinkphp5官方给我们提供了一个日志授权的功能,通过这个日志授权功能,我们就可以只记录某些特定的日志信息,极大的提高了网站的运行性能和减去了多余的日志文件。

'log' => [
        // 日志记录方式,内置 file socket 支持扩展
       // 'type'  => 'File',
        'type'  => '\\log\\Mysql',
        // 日志保存目录
        'path'  => LOG_PATH,
        // 日志记录级别
        'level' => [],
        // 授权只有127.0.0.1 才能记录日志
        //'allow_key' =>  ['127.0.0.1'],
        //只记录某些日志
        'allow_key' =>  ['Index/index','Index/c'],
    ],

然后编写控制器基类,其他的控制器要继承这个,在初始化方法中添加日志的key,save方法还会自动判断存哪些


不过一般这个key我们不会写死,会写成下面的方式

Log::key($this->request->controller()."/".$this->request->action());

评论已关闭。