zoukankan      html  css  js  c++  java
  • [Laravel系列] 框架中增加记录access log的日志中间件

    有时候我们需要记录下请求和响应的全部参数

    这样可以方便排查问题

    现在通过中间件的形式增加一个AccessLog的记录功能

    appHttpMiddleware目录下增加AccessLog.php 文件

    <?php
    
    namespace AppHttpMiddleware;
    
    use Closure;
    
    class AccessLog
    {
        /**
         * 路由全局中间件
         *
         * @param  IlluminateHttpRequest  $request
         * @param  Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            $requestTime = microtime(true);
    
            $response = $next($request);
    
            $rq_time = microtime(true) - $requestTime;
    
            $log = [
                'method' => $request->method(),
                'url' => $request->fullUrl(),
                'param' => json_encode($request->all(), JSON_UNESCAPED_UNICODE),
                'response' => $response->getContent(),
                'req_header' => json_encode($request->header(), JSON_UNESCAPED_UNICODE),
                'resp_header' => json_encode($response->headers->all(), JSON_UNESCAPED_UNICODE),
                'ip_address' => $request->ip(),
                'rq_time' => sprintf("%.2f", $rq_time),
            ];
    
            logger()->channel('access')->info($log);
    
            return $response;
        }
    }

    app/Http/Kernel.php 注册一下AppHttpMiddlewareAccessLog::class

    class Kernel extends HttpKernel
    {
        /**
         * The application's global HTTP middleware stack.
         *
         * These middleware are run during every request to your application.
         *
         * @var array
         */
        protected $middleware = [
            // AppHttpMiddlewareTrustHosts::class,
            AppHttpMiddlewareTrustProxies::class,
            FruitcakeCorsHandleCors::class,
            AppHttpMiddlewarePreventRequestsDuringMaintenance::class,
            IlluminateFoundationHttpMiddlewareValidatePostSize::class,
            AppHttpMiddlewareTrimStrings::class,
            IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class,
            AppHttpMiddlewareAccessLog::class
        ];

    增加一下配置

    config/logging.php

            'access' => [
                'driver' => 'daily',
                'path' => env('LOG_PATH_ACCESS', storage_path('logs/access/laravel.log')),
                'level' => env('LOG_LEVEL', 'debug'),
                'days' => 14,
            ],

    请求一下就会看到生成文件 

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com
  • 相关阅读:
    java中异常的处理
    java中异常的处理
    python入门(一)
    logstash urldecode filter 插件
    logstash urlencode解码
    go get下载第三方包问题的解决
    饿了么这样跳过Redis Cluster遇到的“坑”
    Installation Guide 安装指南
    python pip 切换到阿里云 镜像
    守得云开见月明:一次ASM存储高可用故障解决过程分析
  • 原文地址:https://www.cnblogs.com/taoshihan/p/15467119.html
Copyright © 2011-2022 走看看