当前位置:首页 > PHP > 正文内容

tp6请求日志,tp6记录详细日志

高老师4年前 (2021-07-07)PHP5392

在tp5版本的时候日志中保存了全部的请求信息,保存了请求地址 请求方法 请求路由  请求头  请求参数,但是在tp6中官方取消了。官方解释说由于日志记录了所有的运行错误,因此养成经常查看日志文件的习惯,可以避免和及早发现很多的错误隐患。但是我觉得不方便我定位线上问题,于是把tp5源码中的部分移植到tp6中,tp5中大部分放在tp底层,为了不破坏tp框架我把代码放到中间件中进行继承,所有中间件全部继承此代码。自动记录请求信息。

ActionScript
<?php
declare (strict_types=1);

namespace app\middleware;

use think\facade\Log;
use think\Request;

class Base
{
    /**
     * 保存请求信息
     * Base constructor.
     */
    public function __construct()
    {
        $request = app(Request::class);
        $requestInfo = [
            'ip' => $request->ip(),
            'method' => $request->method(),
            'host' => $request->host(),
            'uri' => $request->url(),
        ];
        $logInfo = [
            "{$requestInfo['ip']} {$requestInfo['method']} {$requestInfo['host']}{$requestInfo['uri']}",
            '[ ROUTE ] ' . var_export($this->getRouteInfo(), true),
            '[ HEADER ] ' . var_export($request->header(), true),
            '[ PARAM ] ' . var_export($request->param(), true),
            '---------------------------------------------------------------',
        ];
        $logInfo = implode(PHP_EOL, $logInfo) . PHP_EOL;
        Log::record($logInfo, 'info');
    }

    /**
     * 获取路由信息
     * @return array
     */
    protected function getRouteInfo(): array
    {
        $request = app(Request::class);
        return [
            'rule' => $request->rule()->getRule(),
            'route' => $request->rule()->getRoute(),
            'option' => $request->rule()->getOption(),
            'var' => $request->rule()->getVars(),
        ];
    }
}

以上代码从Tp5查看源码实现的。所有中间件都继承base即可。生成的日志和tp5完全一样

[2021-07-07T21:09:50+08:00][info] 127.0.0.1 POST learn.cn/api/v3/up_professions

[ ROUTE ] array (

  'rule' => 'v3/up_professions',

  'route' => 'api/User/update',

  'option' => 

  array (

    'remove_slash' => false,

    'merge_rule_regex' => false,

    'middleware' => 

    array (

      0 => 'app\\middleware\\CheckLogin',

    ),

  ),

  'var' => 

  array (

  ),

)

[ HEADER ] array (

  'accept-encoding' => 'gzip, deflate',

  'accept' => '*/*',

  'token' => 'fjsfnsjdfneofnjsnsfgjnsga',

  'content-type' => 'application/json',

  'content-length' => '2',

  'connection' => 'keep-alive',

  'host' => 'learn.cn',

)

[ PARAM ] array (

)

---------------------------------------------------------------

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/204.html

“tp6请求日志,tp6记录详细日志” 的相关文章

php非对称加密

php非对称加密

先在centos安装openssl,然后开始://生成私钥openssl genrsa -out rsa_private_key.pem 1024//生成公钥openssl rsa -in rsa_private_key.pem&...

 php xml字符串转数组,phpxml转数组,php 将xml转换成数组

php xml字符串转数组,phpxml转数组,php 将xml转换成数组

001源码:/*  * $xml_str是xml字符串  */ function  xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php 获取当前执行文件,php 获取当前执行文件,php 获取当前文件

php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/*  * 获取当前PHP文件名称  */ if (!function_exists('phpself&#...

全方位认识PHP的SESSION

全方位认识PHP的SESSION

【一】.介绍session由于HTTP是无状态的请求,创建一个会话需要保持必须需要身份标识。当用户第一次访问,PHP会为用户创建一个唯一的sessionid,并将sessionid通过cookie发送给浏览器,并在服务器的临时文件创建一个以sessionid为名的文件用来保存这个sessionid保...

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...

php  RabbitMQ消息队列

php RabbitMQ消息队列

(1).config.php 配置文件<?php /**  * RabbitMQ_Config  */ $config = [     'host' => ...