如何在php-fpm.conf中为慢日志文件名添加日期实现日志轮转?
PHP-FPM慢日志添加日期实现轮转的配置问题
你的这种配置方式不可行,原因是PHP-FPM的配置文件不支持解析Shell命令或自定义变量引用:
- 配置里的
$(date +"%Y-%m-%d")会被当作普通字符串处理,不会执行Shell命令生成日期 $date也无法被PHP-FPM识别为变量,启动时会尝试创建包含无效字符的日志文件路径,导致启动失败
推荐的实现方案
方案1:使用logrotate工具(最稳定推荐)
这是Linux系统自带的标准日志轮转工具,无需修改PHP-FPM核心配置,步骤如下:
- 保持PHP-FPM配置中的慢日志路径为固定值:
[www] slowlog = /var/www/html/perf/slow.log request_slowlog_timeout = 3s - 创建logrotate配置文件,比如
/etc/logrotate.d/php-fpm-slowlog,写入以下内容:/var/www/html/perf/slow.log { daily # 每天轮转一次 rotate 30 # 保留最近30天的日志 compress # 压缩旧日志文件 missingok # 日志文件不存在时不报错 notifempty # 空日志文件不进行轮转 postrotate systemctl reload php-fpm # 轮转后重载PHP-FPM,使其切换到新日志文件 endscript } - 保存后,logrotate会自动按配置执行轮转(系统默认每天执行一次,也可以手动执行
logrotate /etc/logrotate.d/php-fpm-slowlog测试)
方案2:通过启动脚本动态指定日志路径(不推荐)
如果一定要让日志文件名自带日期,可以通过修改PHP-FPM的启动脚本实现,以systemd服务为例:
- 修改PHP-FPM的systemd服务文件(通常路径为
/usr/lib/systemd/system/php-fpm.service) - 在
[Service]段中,将原ExecStart替换为动态生成日志路径的命令:ExecStart=/bin/sh -c 'php-fpm -y /etc/php-fpm.conf --slowlog /var/www/html/perf/slow-$(date +%Y-%m-%d).log' - 重新加载systemd配置并重启PHP-FPM:
systemctl daemon-reload systemctl restart php-fpm
注意:这种方式依赖Shell命令执行,不同PHP-FPM版本可能不支持命令行参数覆盖配置,且维护成本较高,不如logrotate方案可靠
内容的提问来源于stack exchange,提问作者lobafox
相关产品推荐
相关产品推荐

