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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: tp6请求日志,tp6记录详细日志

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

<?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 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 (

)


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
3月前
|
JavaScript Serverless Linux
函数计算产品使用问题之遇到Node.js环境下的请求日志没有正常输出时,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
存储 Kubernetes API
【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Application Insights呢?让它和使用Azure上托管的 Gateway一样呢?
【APIM】Azure API Management Self-Host Gateway是否可以把请求的日志发送到Application Insights呢?让它和使用Azure上托管的 Gateway一样呢?
|
3月前
|
数据采集 存储 监控
Haskell爬虫中日志记录:监控HTTP请求与响应
Haskell爬虫中日志记录:监控HTTP请求与响应
|
3月前
|
Java
SpringBoot 拦截器 统一日志 记录用户请求返回日志
SpringBoot 拦截器 统一日志 记录用户请求返回日志
167 0
|
4月前
PolarDB-SCC使用问题之线性Lamport时间戳如何保证强一致性
PolarDB-SCC使用问题之线性Lamport时间戳如何保证强一致性
|
5月前
|
分布式计算 监控 大数据
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
|
6月前
|
Java
java使用AOP切面获取请求日志并记录
java使用AOP切面获取请求日志并记录
|
6月前
|
存储 Java 物联网
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
SpringBoo利用 MDC 机制过滤出单次请求相关的日志
Gateway网关打印请求日志
Gateway网关打印请求日志