温馨提示×

CentOS PHP日志如何分割

小樊
42
2026-08-19 05:03:03
栏目: 编程语言

在 CentOS 上,PHP 日志分割常见有几种做法,取决于你用的是 PHP-FPM 还是 Apache + mod_php,以及日志是 error_log / access_log / php-fpm 日志。下面按常见场景给你一套可落地方案。


一、PHP-FPM 日志分割(最常见)

1️⃣ 默认 PHP-FPM 日志位置

一般位于:

/var/log/php-fpm/error.log
/var/log/php-fpm/www-error.log

2️⃣ 使用 logrotate(推荐 ✅)

CentOS 自带 logrotate,非常适合做日志分割。

创建 logrotate 配置文件

vim /etc/logrotate.d/php-fpm

示例配置(按天切割,保留 7 天)

/var/log/php-fpm/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload php-fpm > /dev/null 2>&1 || true
    endscript
}

⚠️ 注意:

  • www-data 可能是 apache / nginx,根据你的运行用户调整
  • php-fpm 服务名可能是 php-fpmphp74-php-fpm

测试 logrotate

logrotate -d /etc/logrotate.d/php-fpm

二、PHP error_log(php.ini 中定义的日志)

1️⃣ 查看 php.ini 日志路径

php -i | grep error_log

常见路径:

error_log = /var/log/php_error.log

2️⃣ 同样使用 logrotate

vim /etc/logrotate.d/php
/var/log/php_error.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 apache apache
    postrotate
        systemctl reload php-fpm > /dev/null 2>&1 || true
    endscript
}

三、Apache + mod_php(较少见)

Apache 日志分割

/etc/logrotate.d/httpd

默认已配置,一般无需额外处理。


四、Nginx + PHP-FPM 场景

PHP-FPM 慢日志(slow log)

slowlog = /var/log/php-fpm/www-slow.log

logrotate 示例:

/var/log/php-fpm/www-slow.log {
    weekly
    rotate 4
    compress
    missingok
    notifempty
}

五、不推荐但可用:手动切割(了解即可)

mv php-fpm.log php-fpm.log.2026-01-21
kill -USR1 $(cat /run/php-fpm/php-fpm.pid)

不建议生产环境长期使用


六、常见问题排查

❓ 日志不切割?

  • 检查 logrotate 是否运行:
cat /var/lib/logrotate/logrotate.status

❓ 切割后不写新日志?

  • 忘记 reload php-fpm
  • 文件权限不对

七、推荐方案总结 ✅

场景 推荐方式
PHP-FPM logrotate + reload
自定义 error_log logrotate
高并发 日志按天 + 压缩
生产环境 不要手动切割

如果你愿意,可以告诉我:

  • ✅ CentOS 版本(7 / 8 / Stream)
  • ✅ PHP 版本
  • ✅ 是 Nginx 还是 Apache

我可以帮你写出完全贴合你环境的 logrotate 配置

0