必须配置logrotate轮转Swoole自定义日志,因宝塔日志轮转仅作用于Web服务器日志;需补全Swoole的log_file路径并赋权,创建/etc/logrotate.d/swoole-custom规则,设置daily轮转、保留30天、压缩归档,并验证语法及定时任务。

宝塔面板安装Swoole扩展后,WebSocket或协程HTTP服务持续运行会产生大量访问日志与错误日志,若不设置日志轮转,单个log文件可能在数小时内突破GB级,导致磁盘爆满、服务写入失败甚至PHP-FPM崩溃。必须在Swoole服务启动前或运行中立即配置日志切割策略。
确认Swoole服务是否已启用日志输出
进入Swoole服务代码目录(如/www/wwwroot/your-project/server.php),检查是否显式设置了日志路径:
若使用Swoole\Http\Server,需存在类似$server->set(['log_file' => '/www/wwwlogs/swoole_access.log']);的配置;若未设置,Swoole默认将日志输出至/dev/stderr,无法被宝塔日志轮转识别——【必须补全log_file路径,且路径需有写入权限】。
在宝塔面板中启用对应网站的日志轮转
此操作仅对Web请求类日志有效,不适用于纯CLI启动的Swoole服务(如php server.php)。
登录宝塔 → 左侧「网站」→ 点击你的域名 → 「设置」→ 「日志管理」→ 开启「定期切割日志」开关。
设置「日志保留天数」为7~30天、「单个日志大小限制」建议填100MB(避免小文件泛滥)→ 点击「保存」。
注意:该功能仅轮转Nginx/Apache产生的access.log和error.log,不会自动处理你自定义的swoole_access.log或swoole_error.log。
手动配置Swoole自定义日志的logrotate规则
这是真正生效的核心步骤,适用于所有Swoole服务(包括CLI、WebSocket、TCP Server等)。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
第一步:创建logrotate配置文件
执行:vi /etc/logrotate.d/swoole-custom
第二步:粘贴以下内容(按实际路径替换):
/www/wwwlogs/swoole_*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 www www sharedscripts postrotate if [ -f /www/server/php/80/var/run/php-fpm-80.pid ]; then kill -USR1 `cat /www/server/php/80/var/run/php-fpm-80.pid` 2>/dev/null || true fi endscript}
第三步:验证语法并立即执行一次轮转测试
运行:logrotate -d /etc/logrotate.d/swoole-custom(查看调试输出是否报错)→ 若无错,再执行:logrotate -f /etc/logrotate.d/swoole-custom。
第四步:确保logrotate定时任务已启用
检查crontab -l | grep logrotate,应存在类似0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf的行;若缺失,执行echo "0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf" | crontab -e补上。

















