Laravel 和 lumen sql日志分离

一、使用DB的listen方法:

请先看自定义日志方法:https://blog.csdn.net/hailanzi/article/details/102749510

1、在app/Listeners下新建文件QueryListener.php


namespace App\Listeners;

use Illuminate\Database\Events\QueryExecuted;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;

class QueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function handle(QueryExecuted $event)
    {

        $sql = str_replace("?", "'%s'", $event->sql);
        $log['sql'] = vsprintf($sql, $event->bindings);
        $log['time'] = $event->time;
        $requestId =  md5(time() . rand(1 , 1000));
        $file = env('LOG_FILE_SQL_PATH') ? env('LOG_FILE_SQL_PATH') : storage_path('logs/sql.log');
        $output = "[%datetime%][%channel%][requestId:{$requestId}][Level:%level_name%][Message:%message% %context% %extra%]\n";
        (new \Monolog\Logger('sql'))->pushHandler((new RotatingFileHandler($file,env('LOG_MAXFILE', 5)))
            ->setFormatter(new LineFormatter($output, 'Y-m-d H:i:s', true, true)))
            ->info("query", $log);
    }

}

2、在app/Providers/EventServiceProvider.php 

在$listen 中加上

'Illuminate\Database\Events\QueryExecuted' => [
    'App\Listeners\QueryListener'
],

代码如下:

<?php

namespace App\Providers;

use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\ExampleEvent' => [
            'App\Listeners\ExampleListener',
        ],
        //  加上这句话 执行sql语句
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\QueryListener'
        ],
    ];
}

3、执行结果如下:

查看日志文档如下:

storage\logs\sql-2019-10-25.log

[2019-10-25 07:22:59][sql][requestId:e959ecfe460368b6fc34ad214fa67941][Level:INFO][Message:query {"sql":"select * from `tb_test` )","time":65.9} ]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值