ThinkPHP 6.0 日志通道配置需明确类型、控制写入、匹配需求;默认 file 通道不支持自动清理与大小轮转,须用 monolog 配 RotatingFileHandler 实现按天轮转+7天保留,并注意时区、缓冲及清理脚本安全性。

ThinkPHP 6.0 日志通道配置核心在于 明确通道类型、控制写入行为、匹配业务需求。默认的 file 通道只按天生成文件,不自动清理,也不支持按大小轮转或分级归档——这些都得手动配。
基础通道配置:选对 type 和路径
在 config/log.php 的 channels.file 下设置:
-
type 决定底层驱动:
'File'(原生)、'monolog'(推荐,功能强)、'SocketLog'(开发调试)、'redis'(异步暂存)等 -
path 指定日志根目录,建议用绝对路径,如
runtime/log/或/data/logs/tp6/ -
single 设为
true可强制所有日志写入单个文件(如single.log),适合简单场景或容器环境 -
apart_level 是实用功能:设为
['info', 'warning', 'error']后,每级日志会各自独立成文件(如warning.log、error.log),便于快速筛选
按天轮转 + 自动清理:必须用 Monolog
TP6 原生 File 驱动无法删旧文件。要实现“保留最近 7 天”,需切换为 monolog 并注入 RotatingFileHandler:
- 先执行
composer require monolog/monolog - 在
channels.file中设置:'type' => 'monolog' -
'handler'用闭包返回实例,关键参数:-
$maxFiles = 7:最多保留 7 个日志文件(含当天) -
new \DateTimeZone('Asia/Shanghai'):必须显式指定时区,否则切割时间错乱 - 第 4 个参数设为
false关闭缓冲,否则文件大小控制失效
-
按级别过滤与精简输出
避免日志泛滥,从源头控制:
-
全局 level:在
config/log.php顶层设'level' => ['error', 'warning'],未列明的级别(如info)直接不记录 -
通道级 level:也可在
channels.file.level单独设置,优先级更高 -
realtime_write 设为
true可绕过请求结束统一写入机制,适合关键错误即时落盘(但有性能开销) -
format 可自定义格式,例如
'[%s][%s][%s] %s'对应时间、级别、行为、消息,提升可读性
生产环境特别注意点
线上不能只靠配置,还得防误操作:
- 自定义清理脚本时,别用
find -mtime +7直接删——它可能误删当天正在写的日志(如think-2026-10-29.log)。应结合filemtime()判断最后修改时间,并排除当日文件 - 若用
RotatingFileHandler配了max_size(如'5M'),就别再设daily,二者互斥 - Linux 下若启用了 opcache,注意
opcache.revalidate_freq可能缓存文件状态,影响清理逻辑判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











