Package Data | |
---|---|
Maintainer Username: | Felo-Z |
Maintainer Contact: | dev@nabialek.org (Marcin Nabiałek) |
Package Create Date: | 2025-09-09 |
Package Last Update: | 2025-09-22 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2025-10-15 15:00:03 |
Package Statistics | |
---|---|
Total Downloads: | 4 |
Monthly Downloads: | 4 |
Daily Downloads: | 1 |
Total Stars: | 1 |
Total Watchers: | 0 |
Total Forks: | 0 |
Total Open Issues: | 0 |
Laravel SQL Logger 是一个用于 Laravel/Lumen 框架的 SQL 查询日志记录工具。该工具可以记录所有 SQL 查询和慢查询到日志文件中,帮助开发者在开发过程中验证查询是否有效,并确保应用程序不会运行过多或过慢的数据库查询。
Laravel SQL Logger 通过监听 Laravel 的数据库查询事件来捕获 SQL 查询,然后根据配置将查询记录到指定的日志文件中。
sequenceDiagram
participant App as Laravel 应用
participant Provider as ServiceProvider
participant Logger as SqlLogger
participant Query as Query
participant SqlQuery as SqlQuery
participant Writer as Writer
participant Formatter as Formatter
participant Config as Config
participant FileName as FileName
App->>Provider: 启动应用
Provider->>Provider: register()
Provider->>Config: 加载配置
Provider->>Logger: 创建 SqlLogger 实例
Provider->>App: 监听数据库查询事件
App->>Provider: 执行数据库查询
Provider->>Logger: log(query, bindings, time)
Logger->>Query: get(number, query, bindings, time)
Query->>SqlQuery: 创建 SqlQuery 实例
SqlQuery-->>Logger: 返回 SqlQuery 对象
Logger->>Writer: save(sqlQuery)
Writer->>Config: 检查配置
Writer->>Formatter: getLine(sqlQuery)
Formatter->>Formatter: 格式化查询
Formatter-->>Writer: 返回格式化的查询字符串
alt 记录所有查询
Writer->>FileName: getForAllQueries()
FileName-->>Writer: 返回文件名
Writer->>Writer: saveLine(line, fileName)
end
alt 记录慢查询
Writer->>Config: 检查是否为慢查询
Writer->>FileName: getForSlowQueries()
FileName-->>Writer: 返回文件名
Writer->>Writer: saveLine(line, fileName)
end
路径: src/Providers/ServiceProvider.php
主要职责:
关键函数:
register()
: 注册服务和监听器shouldLogAnything()
: 检查是否应该记录任何查询getListenClosure()
: 获取用于监听数据库查询的闭包函数路径: src/SqlLogger.php
主要职责:
关键函数:
log(query, bindings, time)
: 记录 SQL 查询路径: src/Query.php
主要职责:
关键函数:
get(number, query, bindings, time)
: 创建并返回 SqlQuery 对象路径: src/Objects/SqlQuery.php
主要职责:
关键函数:
get()
: 获取完整的查询(带绑定值)raw()
: 获取原始 SQL(不带绑定值)time()
: 获取查询执行时间number()
: 获取查询编号bindings()
: 获取查询绑定值路径: src/Writer.php
主要职责:
关键函数:
save(sqlQuery)
: 保存查询到日志文件shouldLogQuery(query)
: 检查是否应该记录查询shouldLogSlowQuery(query)
: 检查是否应该记录慢查询saveLine(line, fileName, override)
: 保存一行到日志文件路径: src/Formatter.php
主要职责:
关键函数:
getLine(sqlQuery)
: 获取格式化的行queryLine(query)
: 获取查询行originLine()
: 获取来源行(请求或命令行)time(time)
: 格式化时间路径: src/Config.php
主要职责:
关键函数:
logDirectory()
: 获取日志目录logAllQueries()
: 是否记录所有查询logSlowQueries()
: 是否记录慢查询slowLogTime()
: 获取慢查询时间阈值entryFormat()
: 获取条目格式路径: src/FileName.php
主要职责:
关键函数:
getForAllQueries()
: 获取所有查询的文件名getForSlowQueries()
: 获取慢查询的文件名createFileName(fileName)
: 创建文件名parseFileName(fileName)
: 解析文件名(包含日期)配置文件位于 publish/config/sql_logger.php
,主要配置选项包括:
directory
: 日志文件保存目录use_seconds
: 是否以秒为单位显示执行时间console_log_suffix
: Artisan 查询日志后缀extension
: 日志文件扩展名new_lines_to_spaces
: 是否将换行符替换为空格entry_format
: 单个条目格式enabled
: 是否记录所有 SQL 查询override_log
: 是否覆盖日志文件pattern
: 匹配查询的模式file_name
: 日志文件名(不含扩展名)enabled
: 是否记录慢 SQL 查询min_exec_time
: 慢查询的最小执行时间(毫秒)pattern
: 匹配慢查询的模式file_name
: 慢查询日志文件名(不含扩展名)通过 Composer 安装:
composer require mnabialek/laravel-sql-logger --dev
对于 Laravel < 5.5,在 config/app.php
中添加服务提供者:
Mnabialek\LaravelSqlLogger\Providers\ServiceProvider::class,
对于 Lumen,在 bootstrap/app.php
中添加:
$app->register(Mnabialek\LaravelSqlLogger\Providers\ServiceProvider::class);
发布配置文件:
php artisan vendor:publish --provider="Mnabialek\LaravelSqlLogger\Providers\ServiceProvider"
在 .env
文件中添加配置项:
SQL_LOGGER_DIRECTORY="logs/sql"
SQL_LOGGER_USE_SECONDS=false
SQL_LOGGER_CONSOLE_SUFFIX=
SQL_LOGGER_LOG_EXTENSION=".sql"
SQL_LOGGER_ALL_QUERIES_ENABLED=true
SQL_LOGGER_ALL_QUERIES_OVERRIDE=false
SQL_LOGGER_ALL_QUERIES_PATTERN="#.*#i"
SQL_LOGGER_ALL_QUERIES_FILE_NAME="[Y-m-d]-log"
SQL_LOGGER_SLOW_QUERIES_ENABLED=true
SQL_LOGGER_SLOW_QUERIES_MIN_EXEC_TIME=100
SQL_LOGGER_SLOW_QUERIES_PATTERN="#.*#i"
SQL_LOGGER_SLOW_QUERIES_FILE_NAME="[Y-m-d]-slow-log"
SQL_LOGGER_FORMAT_NEW_LINES_TO_SPACES=false
SQL_LOGGER_FORMAT_ENTRY_FORMAT="/* [origin]\\n Query [query_nr] - [datetime] [[query_time]] */\\n[query]\\n[separator]\\n"
默认情况下,日志条目的格式如下:
/* Origin (request): GET http://example.com/api/users
Query 1 - 2023-09-22 10:00:00 [15ms] */
SELECT * FROM users WHERE id = 1;
/*==================================================*/
可以通过修改 SQL_LOGGER_FORMAT_ENTRY_FORMAT
环境变量来自定义格式。
仅在开发环境中使用:在生产环境中禁用此包,以避免影响应用程序性能。
监控慢查询:定期检查慢查询日志,优化性能较差的查询。
合理设置慢查询阈值:根据应用程序的性能要求,设置合适的慢查询时间阈值。
使用模式过滤:使用 pattern
配置选项过滤特定类型的查询。
如果需要扩展或定制 Laravel SQL Logger,可以考虑以下方法:
自定义格式化器:继承 Formatter
类并重写 getLine
方法。
自定义写入器:继承 Writer
类并重写 save
方法。
添加更多日志目标:修改 Writer
类,添加对其他日志目标的支持,如数据库或远程服务。
日志文件未创建:
未记录查询:
SQL_LOGGER_ALL_QUERIES_ENABLED
设置为 true
SQL_LOGGER_ALL_QUERIES_PATTERN
是否匹配您的查询未记录慢查询:
SQL_LOGGER_SLOW_QUERIES_ENABLED
设置为 true
SQL_LOGGER_SLOW_QUERIES_MIN_EXEC_TIME
是否设置得太高Laravel SQL Logger 是一个强大而灵活的工具,可以帮助开发者监控和优化数据库查询。通过记录所有查询和慢查询,它提供了宝贵的见解,帮助识别和解决性能问题。