Laravel 写入sql日志
来源:互联网 发布:mysql root 权限不足 编辑:程序博客网 时间:2024/05/29 11:43
1.laravel5.4
在/app/Providers/AppServiceProvider.php代码如下
<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;use DB;class AppServiceProvider extends ServiceProvider{ /** * Bootstrap any application services. * * @return void */ public function boot() { DB::listen(function ($query) { $sql = str_replace("?", "'%s'", $query->sql); $log = vsprintf($sql, $query->bindings); $log = '[' . date('Y-m-d H:i:s') . '] ' . $log . "\r\n"; $filepath = storage_path('logs\sql.log'); file_put_contents($filepath, $log, FILE_APPEND); }); } /** * Register any application services. * * @return void */ public function register() { // }}
最终日志会显示在\storage\logs\sql.log
2.laravel5.*
使用监听器
第一步:创建监听器
php artisan make:listener QueryListener --event=illuminate.query
生成文件于 app/Listeners/QueryListener.php
然后删除 app/Listeners/QueryListener.php
顶部的 use App\Events\illuminate.query;
, 这是自动生成的。
第二步:注册事件
打开 app/Providers/EventServiceProvider.php
,在 $listen
中添加 illuminate.query
事件的监听器为 QueryListener
:
protected $listen = [ 'illuminate.query' => [ QueryListener::class, ], ];当然在类前面你需要
use App\Listeners\QueryListener;
不然就报类不存在了。第三步:添加逻辑
修改上面生成的文件,我们把 SQL 查询记录到日志里,所以编辑 handle
方法为:
/** * Handle the event. * * @param Events $event * @return void */ public function handle($sql, $params) { if (env('APP_ENV', 'production') == 'local') { foreach ($params as $index => $param) { if ($param instanceof DateTime) { $params[$index] = $param->format('Y-m-d H:i:s'); } } $sql = str_replace("?", "'%s'", $sql); array_unshift($params, $sql); Log::info(call_user_func_array('sprintf', $params)); } }
上面我们用到了两个类:Log
与 DateTime
, 别忘记引入它们。
解释一下上面的代码:
illuminate.query
事件触发时的参数为两个:handle($sql, $params)
, SQL 预处理语句与查询参数值;- 我们只在开发环境记录 SQL:
env('APP_ENV', 'production') == 'local'
; - 我们的参数里可能存在日期类型,所以直接记日志会报错,所以处理一下:
$param instanceof DateTime
;
然后跑一下试试吧,应该在日志里就能看到:
[2017-11-09 05:31:57] local.INFO: select * from `bk_article_position` where `is_delete` = '1' and `is_active` = '1' order by `id` desc [2017-11-09 05:31:57] local.INFO: select * from `bk_article_tags` where `is_delete` = '1' and `is_active` = '1' order by `id` desc [2017-11-09 05:31:57] local.INFO: select * from `bk_article_position` where `is_delete` = '1' and `is_active` = '1' order by `id` desc最终显示在\storage\logs\laravel.log
阅读全文
0 0
- Laravel 写入sql日志
- laravel中把查询数据库的sql写入日志中
- Laravel 记录SQL日志
- Laravel 记录SQL日志
- Laravel 日志
- laravel中打印sql语句到日志中
- 写入日志
- sql 在更新某字段后写入日志触发器
- PL/SQL(Oracle)如何写入日志文件和读取文件
- Laravel批量写入数据详解
- composer 安装 laravel 日志
- laravel 操作日志;
- laravel 的日志
- Laravel-日志管理
- 业务日志之日志写入
- 写入日志文件
- 写入应用程序日志
- 错误写入日志
- Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁
- CentOS7下的网络设定方法
- A/ B测试——你做的是错的
- poj 3436 网络流基础题
- Excel(xls)转json工具
- Laravel 写入sql日志
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte
- 十一月八日学习心得
- Android Studio --“Cannot resolve symbol R” 以及“String types not allowed”解决办法
- GridView出现重叠或者最后一行显示不全原因分析
- [模板]倍增LCA
- 欢迎使用CSDN-markdown编辑器
- 2017.11.09第七课
- 独家 | 手把手教你用scrapy制作一个小程序 !(附代码)