内容简介: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());
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 架构师必看!操作日志系统搭建秘技
- 使用Log4J进行日志操作
- Linux 下 logrotate 日志轮询操作梳理
- 在线答题系统 WTS 1.0.0 发布,增加操作审计日志
- Spring boot学习(六)Spring boot实现AOP记录操作日志
- 日志与日志不一样:五种不能忽略的日志源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。