IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Laravel基于PHP Monolog打造一个API日志记录器 -> 正文阅读

[PHP知识库]Laravel基于PHP Monolog打造一个API日志记录器

之前的文章中,我们提到了基于PHP Monolog打造一个API日志记录器,链接在此,基于PHP Monolog,打造一个API请求日志记录器

而本文中,我们将介绍如何在Laravel简洁快速的使用它。

composer require pianzhou/monolog
comopser require pianzhou/laravel

1、开始之前,我们新建一个数据表,以MySQL为例:

CREATE TABLE IF NOT EXISTS `t_response_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `result` text NOT NULL,
  `channel` varchar(20) NOT NULL,
  `level_name` varchar(20) NOT NULL,
  `level` smallint(6) NOT NULL,
  `uid` varchar(32) NOT NULL,
  `process_id` int(11) NOT NULL,
  `ip` varchar(32) NOT NULL,
  `url` varchar(255) NOT NULL,
  `http_method` varchar(10) NOT NULL,
  `query_string` varchar(255) NOT NULL,
  `referrer` varchar(255) NOT NULL,
  `post` text NOT NULL,
  `context` text NOT NULL,
  `extra` text NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
COMMIT;

2、新增好数据表后,我们让系统支持processors和Database Driver

在app.php中,添加provider配置项(最好靠前配置)

Pianzhou\Laravel\Log\LogServiceProvider::class,
Pianzhou\Laravel\Log\DatabaseDriverServiceProvider::class,

?3、然后,在logging.php配置文件中

'response_log' => [
    'driver'        => 'database',
    'level'         => env('LOG_LEVEL', 'debug'),
    'batch'         => true,
    // 'connection'    => 'mysql',
    'table'         => 'response_logs',
    'formatter'     => Pianzhou\Monolog\Formatter\TransformScalarFormatter::class,
    'formatter_with'    => [
        // 'dateFormat'    => 'Y-m-d H:i:s',
        'transfroms'    => [
            'result'        => 'message',
            'channel'       => 'channel',
            'level_name'    => 'level_name',
            'level'         => 'level',
            'context'       => 'context',
            'extra'         => 'extra',
            'created_at'    => 'datetime',
            'process_id'    => 'extra.process_id',
            'uid'           => 'extra.uid',
            'url'           => 'extra.url',
            'ip'            => 'extra.ip',
            'http_method'   => 'extra.http_method',
            'query_string'  => 'extra.query_string',
            'referrer'      => 'extra.referrer',
            'post'          => 'extra.post',
        ]
    ],
    'processors'    => [
        Monolog\Processor\UidProcessor::class,
        Monolog\Processor\ProcessIdProcessor::class,
        Monolog\Processor\WebProcessor::class => [
            'extraFields' => [
                'url'         => 'REQUEST_URI',
                'ip'          => 'REMOTE_ADDR',
                'http_method' => 'REQUEST_METHOD',
                'server'      => 'SERVER_NAME',
                'referrer'    => 'HTTP_REFERER',
                'query_string'=> 'QUERY_STRING',
            ],
        ],
        Pianzhou\Monolog\Processor\PostProcessor::class    => [
            'maskFileds'    => [
                'password',
                'password_confirm',
                'data.password',
                'data.username.a',
            ]
        ]
    ],
],

4、在app\Http\Middleware目录中,新增ApiLog.php代码如下:

<?php
/*
 * @Description: 响应内容记录器
 * @Author: (c) Pian Zhou <pianzhou2021@163.com>
 * @Date: 2022-01-08 22:26:13
 * @LastEditors: Pian Zhou
 * @LastEditTime: 2022-01-10 23:14:19
 */

namespace App\Http\Middleware;

use Pianzhou\Laravel\Log\Middleware\ResponseLogMiddleware;

class ApiLog extends ResponseLogMiddleware
{
    /**
     * 日志通道
     *
     * @var string
     */
    protected $channel = 'response_log';

    /**
     * 调试模式是否跳过记录
     *
     * @var boolean
     */
    protected $skipIfDebug  = false;

    /**
     * 配置中的路径将不会被记录
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

5、新增好Middleware后,我们就可以在app\Http\Kernel.php中配置了

????????5.1 如果需要全局记录,则在middleware属性中配置:


    protected $middleware = [
        \App\Http\Middleware\ApiLog::class,
    ];

????????5.2 如果只是需要在api,或者web中使用,则配置在middlewareGroups属性中:

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\ApiLog::class,
        ],

        'api' => [
            // \App\Http\Middleware\ApiLog::class,
        ],
    ];

????????5.3 如果,我们想在路由中使用则配置在routeMiddleware属性中:

    protected $routeMiddleware = [
        'response.log'=> \App\Http\Middleware\ApiLog::class,
    ];

这样,我们就可以在route中使用,例如:


Route::middleware('response.log')->any('/', function () {
    return 'test';
}

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:45:27  更:2022-01-14 01:45:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:35:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码