温馨提示×

centos php日志为啥丢失

小樊
47
2026-10-03 03:43:25
栏目: 编程语言

在 CentOS 上 PHP 日志“丢失”或“看不到”,通常不是真的被删了,而是配置、权限、服务方式、或日志轮转导致的。下面按最常见原因给你梳理一下。


一、PHP 日志到底写在哪里?

PHP 本身不强制写日志文件,是否记录、写哪里,取决于:

1. php.ini 配置

关键参数:

log_errors = On
error_log = /var/log/php_errors.log

常见情况:

  • log_errors = Off → 不记录
  • error_log 没设 → 交给 SAPI(如 Apache / php-fpm)
  • error_log 设了但文件不存在 → 可能写不进去

✅ 检查:

php --ini
php -i | grep error_log

二、不同运行方式,日志位置不同(很重要)

1. PHP-FPM(最常见)

日志在:

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

或 pool 配置里:

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

✅ 查看:

ls -l /var/log/php-fpm/
journalctl -u php-fpm

2. Apache + mod_php

日志写到:

/var/log/httpd/error_log

✅ 查看:

tail -f /var/log/httpd/error_log

3. Nginx + PHP-FPM

  • Nginx 错误 → /var/log/nginx/error.log
  • PHP 错误 → php-fpm 日志或 error_log 指定文件

三、权限问题(非常常见)

PHP 进程用户(如 apache / nginx / php-fpm)没权限写日志

表现:

  • 日志文件不生成
  • 或只偶尔写一点

解决:

touch /var/log/php_errors.log
chown nginx:nginx /var/log/php_errors.log
chmod 644 /var/log/php_errors.log

SELinux 也可能导致:

ls -Z /var/log/php_errors.log
setsebool -P httpd_can_sendmail on

四、logrotate 把日志“转走了”

CentOS 默认会轮转日志:

/etc/logrotate.d/php-fpm

可能你看到的是:

  • php-fpm-error.log
  • php-fpm-error.log-20260101.gz

✅ 查看:

ls -lh /var/log/php-fpm/
zcat /var/log/php-fpm/*.gz | less

五、错误级别太低,没触发

error_reporting = E_ALL
display_errors = Off
log_errors = On

否则:

  • Notice / Warning 不记
  • 只记 Fatal

六、被 systemd 接管了

如果是 PHP CLI 或 FPM:

journalctl -u php-fpm
journalctl -u httpd

很多“丢失”的日志其实在 journal 里。


七、快速排查清单(建议你照着做)

# 1. 看 php 配置
php -i | grep -E "log_errors|error_log"

# 2. 看 fpm 日志
ls -l /var/log/php-fpm/

# 3. 看 web 服务日志
tail -n 50 /var/log/nginx/error.log
tail -n 50 /var/log/httpd/error_log

# 4. 看系统日志
journalctl -u php-fpm --since "1 hour ago"

八、如果你愿意,我可以直接帮你定位

你可以告诉我:

  1. CentOS 版本(7 / 8 / Stream)
  2. PHP 运行方式(Apache / Nginx + FPM / CLI)
  3. 你期望日志写在哪里
  4. php -i | grep error_log 的输出

我可以直接告诉你该改哪一行。

0 踩