ThinkPHP 6.0 通过 .env 的 APP_ENV 变量动态配置日志:开发环境启用 debug/sql 级别、单文件;生产环境仅 warning+、按天轮转(保留15天)、禁用 sql 级别,并安全清理旧日志。

ThinkPHP 6.0 本身不内置“开发/生产环境自动切换日志配置”的机制,但可以通过环境变量 + 配置文件条件加载实现清晰分离,核心是利用 .env 中的 APP_ENV 值动态调整 config/log.php 的行为。
用 APP_ENV 控制日志级别和通道行为
TP6 默认读取 .env 文件中的 APP_ENV(如 development 或 production),你可以在 config/log.php 中直接判断它:
- 开发环境启用
debug和sql级别,方便查问题和看查询语句 - 生产环境只保留
warning及以上,避免敏感信息泄露或 I/O 过载 - 开发可开单文件日志(
single => true),便于快速翻阅;生产必须用按天分割 + 自动清理
配置示例:log.php 中按环境分支写
在 config/log.php 的 channels.file 配置块里这样写:
'level' => env('APP_ENV') === 'production'
? ['warning', 'error', 'critical']
: ['debug', 'info', 'notice', 'warning', 'error', 'sql'],
'single' => env('APP_ENV') === 'development',
'apart_level' => env('APP_ENV') === 'production'
? ['error', 'warning']
: ['debug', 'info', 'sql', 'error'],
注意:sql 是 TP6 特有级别,专用于记录数据库执行语句,开发时很有用,生产务必关掉。
生产环境强制启用 RotatingFileHandler 清理
仅靠 level 过滤不够,生产必须防止日志无限堆积。需搭配 Monolog 的 RotatingFileHandler:
- 确保已安装:
composer require monolog/monolog - 在
log.php中将type改为'monolog' - handler 用闭包返回实例,传入
$maxFiles = 15(保留最近 15 天)和new \DateTimeZone('Asia/Shanghai') - 务必关闭缓冲:
new RotatingFileHandler(..., ..., ..., false),否则轮转失效
避免日志误删:当天文件永远保护
无论用命令行脚本还是定时任务清理旧日志,都不要简单按文件名或修改时间硬删。正确做法是:
- 用
filemtime()获取最后修改时间 - 对比当前日期,只删「早于今天」且「修改时间超过 N 天」的文件
- 跳过所有文件名匹配
think-'.date('Y-m-d').'.log的当日文件
否则可能删掉正在写的日志,导致后续写入失败或报错。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











