php - laravel中在日志中记录sql语句
PHPz
PHPz 2017-04-11 10:12:45
[PHP讨论组]

现在的需求是 记录用户的操作记录(包含操作sql)

目前的想法如下:
先自定义一个事件监听
然后自定义一个方法L(),在方法中触发事件

然后开发人员在自己希望记录日志的地方打上一个L(['想记录的数据', $是否记录此L方法之前所执行的所有sql])

然后L()方法把这些写参数传递给事件的listener,listener主要就是把用户想记录的这些数据放到数据库中,作为一次操作记录

现在的问题是我如何随意地就能在打了L()方法的位置获取之前的sql运行记录?

网上有人说在route中监听illuminate.query,这样一是直接记录了整个请求中所有的sql,不太符合要求,二是写在route中或者route之前感觉太low了

还有人说先DB::enableQueryLog() ,然后是sql语句, 然后可以获取sql, 问题是这样的话, 我就需要在每个控制器中首先开启DB::enableQueryLog(), 我希望的是用户直接在L方法中传入参数用来决定记录不记录sql

求大神指教

PHPz
PHPz

学习是最好的投资!

全部回复(1)
迷茫

你需要把下面的放到 AppServiceProviderboot

在此处弄个全局变量记录所有的执行的语句

$a = 某全局变量
app('db')->listen(function($query, $bindings = null, $time = null, $connectionName = null) use($a) {
    $a->push(....);
});

L() 去读取这个值即可,
当然你用一个单实例的类去记录更好咯,这样代码比较面向对象。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号