温馨提示×

centos php日志如何按天分割

小樊
42
2026-09-24 08:46:17
栏目: 编程语言

在 CentOS 上,PHP 本身不会自动按天分割日志,通常需要借助 Web 服务器(Nginx / Apache)logrotate 来实现。下面按常见场景说明。


一、通过 Web 服务器按天记录 PHP 日志(推荐)

1️⃣ Nginx + PHP-FPM(最常见)

PHP 错误日志按天

修改 php-fpm.confwww.conf

php_admin_value[error_log] = /var/log/php/php_errors_%Y%m%d.log

⚠️ 注意:PHP 原生 error_log 不支持日期变量 ✅ PHP-FPM 的 php_admin_value[error_value] 支持 %Y%m%d

然后创建目录:

mkdir -p /var/log/php
chown -R www-data:www-data /var/log/php

每天 PHP-FPM 会自动生成:

php_errors_20260121.log

Nginx 访问 / PHP 请求日志按天

nginx.conf 或虚拟主机:

access_log /var/log/nginx/access_%Y%m%d.log;
error_log  /var/log/nginx/error.log;

Nginx 原生支持时间变量 ✅


2️⃣ Apache + PHP

Apache 不支持日期变量,但可以用 rotatelogs

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_%Y%m%d.log 86400" combined
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_%Y%m%d.log 86400"

二、使用 logrotate 按天分割(通用方案)

如果你现在是:

error_log = /var/log/php/php_errors.log

1️⃣ 创建 logrotate 配置

vi /etc/logrotate.d/php

内容:

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

2️⃣ 测试

logrotate -d /etc/logrotate.d/php   # 调试
logrotate -f /etc/logrotate.d/php   # 强制执行

三、PHP 业务日志按天(代码层)

如果是自己写的日志(如 file_put_contents):

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

四、方案对比

方案 是否推荐 说明
PHP-FPM 日期日志 ⭐⭐⭐⭐⭐ 最干净、无切割风险
Nginx rotatelogs ⭐⭐⭐⭐ 稳定
logrotate ⭐⭐⭐ 通用但需 reload
PHP 代码写日期 ⭐⭐ 适合业务日志

如果你能告诉我:

  • CentOS 版本
  • Nginx / Apache
  • PHP 版本
  • PHP 错误日志 还是 业务日志

我可以直接给你一份可用配置

0