温馨提示×

centos php日志怎么分割

小樊
42
2026-09-30 06:19:19
栏目: 编程语言

在 CentOS 上,PHP 本身不会自动分割日志,通常需要借助 logrotate 或 定时任务 + 脚本 来实现。下面按常见场景给你几种做法。


一、使用 logrotate(推荐)

CentOS 默认已安装 logrotate,非常适合管理 PHP 日志。

1. 找到 PHP 日志位置

常见位置:

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

查看 php.ini:

php --ini

或

grep error_log /etc/php.ini

2. 创建 logrotate 配置

例如 PHP-FPM 日志:

vi /etc/logrotate.d/php-fpm

内容示例:

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

如果是 CLI 或自定义 PHP 日志:

/var/log/php_errors.log {
    weekly
    rotate 12
    compress
    missingok
    notifempty
    copytruncate
}

3. 测试 logrotate

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

强制执行:

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

二、CLI PHP 脚本日志分割(无 logrotate)

如果你的 PHP 脚本自己写日志(如 file_put_contents):

脚本示例(每天一个文件)

$logFile = '/var/log/php/cli_' . date('Y-m-d') . '.log';
file_put_contents($logFile, $msg, FILE_APPEND);

或用 cron:

0 0 * * * mv /var/log/php/cli.log /var/log/php/cli_$(date +\%Y\%m\%d).log

三、PHP-FPM 多池日志分离(进阶)

/etc/php-fpm.d/www.conf

catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/www.error.log

每个 pool 一个日志,再用 logrotate 管理。


四、常见问题

日志不更新?

  • 确认 error_log 路径
  • 确认目录权限
  • PHP-FPM 需 reload

日志还在变大?

  • 检查是否用了 copytruncate
  • 是否 reload 服务

总结

✅ 最推荐:logrotate + reload php-fpm
✅ CLI 脚本:按日期命名日志
❌ 不建议让 PHP 自己切大文件

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

  • PHP 是 CLI / FPM / Apache
  • 日志路径
  • 是否用了 Docker

我可以给你一份完全可用的配置。

0 踩