Laravel中如何追踪SQL执行过程及监听数据库日志技巧分享?

2026-05-03 00:232阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1059个文字,预计阅读时间需要5分钟。

Laravel中如何追踪SQL执行过程及监听数据库日志技巧分享?

开发时想确认某段代码到底发生了什么SQL,最直接的方法是开启查询日志并手动触发发展打印——sqlDB::enableQueryLog();和sqlDB::getQueryLog();配合使用,但要注意它只对当前请求有效,默认是关闭的。

  • 必须在查询前调用 DB::enableQueryLog(),否则日志为空
  • 执行完要查的数据库操作后,立刻用 DB::getQueryLog() 获取数组,里面每个元素是带 querybindingstime 的关联数组
  • 如果用了 Query Builder 或 Eloquent,它们都走底层 DB,所以能捕获;但原生 PDO 操作或直连不经过 DB 类的,不会记录
  • 别在生产环境开这个,性能损耗明显,且可能泄露敏感参数(bindings 是原始值,没脱敏)

为什么 DB::listen() 没反应?常见配置漏项

DB::listen() 是事件监听方式,比手动启停日志更灵活,但它依赖 Laravel 的事件系统正常工作——很多人加了回调却看不到输出,基本是因为没注册到正确时机或环境不对。

阅读全文
标签:Laravel

本文共计1059个文字,预计阅读时间需要5分钟。

Laravel中如何追踪SQL执行过程及监听数据库日志技巧分享?

开发时想确认某段代码到底发生了什么SQL,最直接的方法是开启查询日志并手动触发发展打印——sqlDB::enableQueryLog();和sqlDB::getQueryLog();配合使用,但要注意它只对当前请求有效,默认是关闭的。

  • 必须在查询前调用 DB::enableQueryLog(),否则日志为空
  • 执行完要查的数据库操作后,立刻用 DB::getQueryLog() 获取数组,里面每个元素是带 querybindingstime 的关联数组
  • 如果用了 Query Builder 或 Eloquent,它们都走底层 DB,所以能捕获;但原生 PDO 操作或直连不经过 DB 类的,不会记录
  • 别在生产环境开这个,性能损耗明显,且可能泄露敏感参数(bindings 是原始值,没脱敏)

为什么 DB::listen() 没反应?常见配置漏项

DB::listen() 是事件监听方式,比手动启停日志更灵活,但它依赖 Laravel 的事件系统正常工作——很多人加了回调却看不到输出,基本是因为没注册到正确时机或环境不对。

阅读全文
标签:Laravel