laravel中在日志中记录sql语句

现在的需求是 记录用户的操作记录(包含操作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

求大神指教

阅读 4.5k
1 个回答

你需要把下面的放到 AppServiceProviderboot

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题