ThinkPHP6生产环境默认不自动写入错误日志,需通过配置log.level不含'error'或设置log.close=true彻底关闭;验证方式为触发错误后检查日志文件无error记录。

ThinkPHP6 默认在生产环境(APP_DEBUG = false)下**不自动写入错误日志**,但只要配置了日志通道且未显式禁用,一旦开启日志记录,error 级别就会被写入。真正要「关闭错误自动写入」,不是删文件或改权限,而是从框架行为层面切断记录路径。
确认并清空日志级别配置
错误日志是否写入,核心取决于 log.level 配置。即使日志驱动启用,若 level 数组里不含 'error',错误就不会落盘。
- 打开
config/log.php,检查'level'项: - 设为空数组:
'level' => []—— 表示不记录任何级别 - 或明确排除 error:
'level' => ['info', 'notice'](不包含error) - 若使用环境变量控制(如
LOG_LEVEL=info,notice),确保它在public/index.php引入框架前已定义,且不含error
关闭整个日志通道或全局写入
更彻底的方式是停用日志系统本身:
- 在
config/log.php中设置:'close' => true(全局关闭所有通道) - 或只关 file 通道:
'channels' => ['file' => ['close' => true]] - 旧版本兼容写法(TP6.0+ 已不推荐):在
env或.env中设LOG_LEVEL="",等效于空 level
禁用 trace 不影响关闭,但可减少冗余内容
trace => true 只影响错误日志是否带堆栈信息,和「是否写入」无关。关闭它不能阻止 error 写入,但能避免日志体积暴增。如果你已通过上述方式停了 error 记录,这项无需调整。
验证是否生效
改完配置后,手动触发一个错误(如访问不存在的控制器),然后检查:
-
runtime/log/目录下当天日期文件是否**无新增 error 行**(可用grep -i error runtime/log/*.log) - 调用
Log::error('test')后,日志文件无变化 → 说明已关闭成功 - 注意:
Log::record()调用仍会入队,但因 level 不匹配或通道关闭,最终不会写入磁盘
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











