thinkphp5 日志操作

栏目: PHP · 发布时间: 6年前

内容简介:thinkphp5 日志操作

日志写入数据库

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

先改一下配置文件 config.php 里的驱动类

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

编写驱动类

<?php 
namespace log;
use think\Db;
 
class Mysql
{
    protected $db;
    // 实例化并传入参数
    public function __construct($config = [])
    {
        $this->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”

然后就可以使用了

<?php
namespace app\index\controller;
use think\Log;
class Index
{
    public function c()
    {
//        $all_config = config('my_config');
//        $all_config = config('allow_ip.ip_list');
        $all_config = config();
        dump($all_config);
        exit;
    }
 
    public function log(){
        Log::info("这是一个log");
        Log::error("这是一个错误");
        Log::error("这是有一个错误");
    }
}

当然也可以修改驱动类来存储到别的介质中,如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方法还会自动判断存哪些

<?php
namespace app\index\controller;
 
use think\Controller;
use think\Log;
 
class Base extends Controller
{
 public function _initialize(){
                Log::key('Index/index');
 Log::key('Index/c');
 }
}

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

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆营销

颠覆营销

陈杰豪、车品觉 / 中信出版社 / 2016-2 / 49.00元

对于大数据未来趋势的判断 车品觉 光阴荏苒,2015年在跌跌荡荡中成了过去式,对于大数据的产业来说过去这一年冒出了很多新的名词。但在我看来,真正的大数据应用和市场才刚刚开始萌芽,所以我希望大家先认清一个关键,那就是所有的数据都是基于应用而产生,而数据经过釆集及整合后又再落实到自身或其他应用情境中,大数据的创新价值可以来自新连接的数据、算法或者产品本身。 过去两年大数据的成长和智能......一起来看看 《颠覆营销》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具