log_file必须是绝对路径且运行用户有写权限;daemonize=true时它是唯一错误输出通道,需设足够日志级别、避免符号链接、统一路径分隔符、显式设置工作目录,并用真实运行身份提前验证权限。

log_file必须是绝对路径且运行用户有写权限
不配 swoole.log_file,或配了但路径不可写,Swoole 在 daemonize => true 后就等于“静默崩溃”——没报错、没日志、进程看似在跑,实则异常被吞掉。常见错误是写成 'log_file' => 'logs/swoole.log'(相对路径)或 'log_file' => '/var/log/swoole.log'(但 www-data 用户没权限写)。
验证方法很简单:
- 启动前手动创建并授权:
touch /var/log/swoole.log && chown www-data:www-data /var/log/swoole.log - 用当前运行用户(不是 root)测试写入:
sudo -u www-data sh -c "echo test >> /var/log/swoole.log",失败就说明权限或 SELinux/ACL 挡路 - 路径中避免符号链接嵌套过深,
realpath()失败时 Swoole 会直接忽略该配置
daemonize=true 时 log_file 是唯一可靠输出通道
一旦开启守护进程,PHP 的 echo、var_dump()、甚至未捕获的协程异常,全都不会出现在终端——它们不是“没发生”,而是被彻底丢弃。此时 swoole.log_file 不只是日志选项,它是你唯一能拿到错误现场的窗口。
别指望 /tmp/swoole.log 自动兜底:这个默认路径只在未配置 log_file 且 PHP 进程有权限写 /tmp 时才启用,而生产环境往往禁写 /tmp;更别说它会被系统清理,无法追溯。
务必同步处理 PHP 层错误:
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
- 在 server 启动前加:
ini_set('error_log', '/var/log/swoole/php_error.log'); - 确保
log_errors = On,且display_errors = Off(防止敏感信息泄露) - 协程内抛出的异常需显式注册:
Swoole\Coroutine::setExceptionHandler(),否则照样无声消失
log_level 过低会让关键错误“隐身”
默认 log_level = SWOOLE_LOG_INFO,这意味着协程超时、调度失败、内存分配告警等都看不到。很多“服务卡死”“连接突增”问题,日志里根本没痕迹,只因级别不够。
线上建议设为 SWOOLE_LOG_WARNING;排查时临时切到 SWOOLE_LOG_DEBUG,但要注意:
-
SWOOLE_LOG_DEBUG会产生海量日志,尤其高并发下,磁盘 IO 可能成为瓶颈 - 若同时开了大量
worker_num或task_worker_num,日志量呈倍数增长,建议配合日志轮转(如logrotate)或关闭 debug 后再上线 -
log_level只控制 Swoole 内部日志,不影响你用file_put_contents()写的应用层日志
Windows 下路径分隔符和工作目录会悄悄破坏 log_file
Windows 上 log_file 配置失败,八成是因为反斜杠 \ 或当前工作目录(cwd)不对。Swoole 底层调用 libuv 做路径解析,遇到 C:\path\to\log.log 容易触发 Invalid argument 并静默失效。
正确做法是统一用正斜杠,并显式重置 cwd:
- 路径拼接一律用
__DIR__ . '/storage/logs/swoole.log',不用__DIR__ . '\storage\logs\swoole.log' - 在
onStart回调里加:chdir(__DIR__);,避免子进程继承错误的 cwd 导致路径解析失败 - 禁用含空格或中文的路径名,比如
日志/或my app/,Windows 下容易因编码或大小写处理引发底层 stat 失败
最常被忽略的是:log_file 权限检查必须在 daemonize 之前完成,且不能依赖 CLI 环境下的测试结果——FPM 和 CLI 的运行用户、umask、open_basedir 都可能不同,务必用真实运行身份验证。










