上线环境必须关闭 db_debug,开发阶段应精准启用查询日志、限制日志级别、分离输出目标并配置轮转清理。

把 db_debug 设为 true 会记录每一条 SQL 查询、绑定参数、执行耗时和错误堆栈,日志量激增是必然结果——这不是异常,而是调试模式的正常表现。上线环境必须关闭,开发阶段则需主动管控日志增长。
立即停用 db_debug(生产/预发布环境)
在 app/Config/Database.php 中,确保:
-
'DB_DEBUG' => false(全局关闭) - 或针对具体数据库组显式设为
false,例如:'default' => [ 'DB_DEBUG' => false, ... ]
同时确认 .env 文件中没有覆盖为 database.db_debug = true。
开发阶段替代方案:精准开启 SQL 日志
不依赖 db_debug,改用 CodeIgniter 4 内置的查询日志机制:
- 在需要观察 SQL 的控制器或服务中,临时调用:
$this->db->enableQueryLog(); - 执行查询后,获取日志:
print_r($this->db->getLog()); - 只在调试时启用,不写入文件,避免日志膨胀
调整日志阈值与输出目标
即使保留 db_debug = true(仅限本地开发),也要限制其影响范围:
- 修改
app/Config/Logger.php中的$threshold,例如设为[6](只记录error及以上),避免debug和info级别混入 SQL 日志 - 将数据库相关日志单独路由到独立文件(通过自定义日志处理器或 LogWriter),避免污染主应用日志
- 禁用
CI_DEBUG环境常量(.env中设为CI_DEBUG = 0),防止框架级调试信息叠加
启用日志轮转与自动清理
若必须长期保留 SQL 日志(如测试环境),务必配置日志滚动:
- 使用 Log4j 或 Logback 风格的轮转策略(需配合第三方库如
monolog) - 或在 Linux 上用
logrotate管理writable/logs/下的日志文件:/var/www/myapp/writable/logs/*.log { daily rotate 7 compress missingok } - 设置定时任务清理超过 3 天的
query-*.log文件











