日志阈值设置在application/config/config.php中,由log_threshold控制;0为禁用,1仅错误,4含错误/调试/信息/警告,5额外包含数据库查询日志(需同时开启database.php中save_queries)。

日志阈值设置在哪个配置文件里
CodeIgniter 3 的日志阈值由 log_threshold 控制,它只在 application/config/config.php 中生效。不是 logs/ 目录下的文件,也不是 database.php 或其他 config 文件——改错地方等于没改。
常见错误现象:改了 application/logs/ 权限、清空了日志文件,但该记录的错误还是不写入,大概率就是 log_threshold 值太小或设成了 0(关闭日志)。
-
log_threshold = 0:完全禁用日志(默认值,很多人没意识到) -
log_threshold = 1:只记录错误(error级别) -
log_threshold = 4:记录错误、调试、信息、警告(常用调试值) -
log_threshold = 5:额外包含数据库查询日志(性能敏感,慎开)
为什么设成 4 还看不到数据库查询日志
因为 log_threshold = 4 不包含数据库日志——那是 log_threshold = 5 的职责。而且,即使设成 5,也得确保 $db['default']['save_queries'] = TRUE(在 application/config/database.php 中),否则查询不会被捕获。
性能影响明显:开启 log_threshold = 5 后,每个请求都会序列化大量 SQL 和绑定参数,尤其在循环查库时,日志体积暴增,I/O 延迟可能翻倍。
- 生产环境绝对不要设为 5,连 4 都建议仅临时开启
- CI3 不支持按模块开关日志(比如只记 DB 不记 ERROR),阈值是全局的
- 日志内容编码依赖
log_file_permissions(默认 0644),权限不对会导致写入失败但无报错
日志文件不自动轮转?别指望 CI3 自带功能
CodeIgniter 3 原生不支持日志切割或按日期/大小轮转。log_threshold 调再高,日志也只会往 application/logs/log-YYYY-mm-dd.php 里追加,单文件可能涨到几百 MB。
没有后台守护进程,也没有 cron 集成点。靠手动清理或外部脚本是唯一可行路径。
- 简单方案:Linux 下用
logrotate配置application/logs/目录 - 代码层补救:在
index.php开头加几行判断,文件超 5MB 就重命名归档(注意并发写入冲突) - 第三方库如
monolog可替换 CI 日志驱动,但要重写Log类,兼容性需验证
开发机和生产环境阈值必须不同
同一份 config.php 不能通吃。本地设 log_threshold = 4 是为了快速定位逻辑问题;线上若照搬,轻则磁盘打满,重则因 I/O 阻塞导致接口超时。
最稳妥的做法是利用 CI3 的环境机制:ENVIRONMENT 常量区分 development / production,并在 config 文件顶部动态赋值:
if (defined('ENVIRONMENT') && ENVIRONMENT === 'production') {
$config['log_threshold'] = 1;
} else {
$config['log_threshold'] = 4;
}
漏掉这步,上线后日志静默,出问题只能靠监控或用户反馈反推——而很多错误根本不会走到用户侧。










