ThinkPHP默认日志路径通过config/log.php中default通道的path配置项修改,需设为绝对路径并确保写权限,多通道可独立配置path,改后需清除runtime/cache缓存。
ThinkPHP 日志通道配置在哪改
默认日志路径在
,但不是靠改文件路径字符串实现的,而是通过日志通道(
)的配置驱动。核心入口是
文件里的
通道定义,或自定义通道的
选项。
常见错误是直接去改
类内部硬编码,这不可维护,且升级后会被覆盖。
修改位置:项目根目录下的
关键配置项是
里的
如果用了多通道(比如单独记录 SQL 日志),每个通道都可独立设
修改 default 通道的 path 配置示例
打开
,找到
通道配置块,在其数组中添加或修改
:
注意:
值必须是**绝对路径**,且 PHP 进程要有写权限;相对路径(如
)容易因 CLI/Web 执行目录不同而失效。
立即学习
“
PHP免费学习笔记(深入)
”;
推荐用
方式动态构造,更健壮
改完记得清空
,否则配置可能不生效
如果日志完全不生成,先检查该目录是否存在、是否可写,而不是怀疑配置没加载
为什么改了 config/log.php 还不生效
ThinkPHP 6+ 的日志系统启动早于应用初始化,
是被框架自动加载的,但有两个常见干扰点:
之前调用
会绕过配置,导致自定义设置被忽略
命令行模式下,
命令启动时可能读取的是
中的
配置,而非主
某些扩展(如 think-swoole)会接管日志驱动,此时需在对应扩展配置里设
验证方式:在控制器里打印
,看
是否是你设的值。
自定义通道 + 多路径分离的实际写法
比如把 SQL 日志单独存到
,不和普通日志混在一起:
然后在数据库配置里指定日志通道:
。这样
的 SQL 日志就只走这个通道。
多个通道之间完全隔离,互不影响
不支持变量插值(如
),日期分割靠
驱动内置逻辑,无需手动拼接
Windows 下路径分隔符用
更稳妥,避免反斜杠转义问题
真正麻烦的不是改路径,而是确保所有运行环境(开发、测试、生产)的路径权限和磁盘空间一致——这点常被跳过,直到某天日志突然停写才排查。
runtime/log/channelconfig/log.phpdefaultpaththink\log\driver\Fileconfig/log.php'channels' => ['default' => [...]]'path'pathconfig/log.php'default''path'
'default' => [
'type' => 'File',
'path' => '/var/log/thinkphp/', // ← 改这里,注意末尾斜杠
'level' => [],
],
path'../logs/'env('LOG_PATH', runtime_path() . 'log' . DIRECTORY_SEPARATOR)runtime/cache/config/log.phpApp::init()Log::init()thinkconfig/console.phploglog.phplog.pathLog::getChannel('default')->getConfig()path/data/logs/sql/
'sql' => [
'type' => 'File',
'path' => '/data/logs/sql/',
'level' => ['sql'],
'file_size' => 1024 * 1024 * 10, // 10MB
],
'log' => ['channel' => 'sql']Db::query()path{date}fileDIRECTORY_SEPARATOR