温馨提示×

centos环境下php日志如何管理

小樊
41
2025-11-25 18:32:04
栏目: 编程语言

CentOS 环境下 PHP 日志管理

一 日志类型与定位

  • PHP 错误日志:由 php.ini 的 error_log 指定,常见路径为 /var/log/php_errors.log;若使用 PHP-FPM,通常在 /var/log/php-fpm/error.log(池配置如 /etc/php-fpm.d/www.conf 中定义)。
  • Web 服务器日志:
    • Apache/var/log/httpd/error_log/var/log/httpd/access_log
    • Nginx/var/log/nginx/error.log/var/log/nginx/access_log
  • 应用框架日志:如 Laravel/Symfony 等,日志一般在应用目录的 logs/ 下,需以应用配置为准。
  • 快速确认位置:
    • 查看 php.ini:grep -n "^error_log\|^log_errors" /etc/php.ini /etc/php.d/*.ini
    • 查看 PHP-FPM:grep -n "error_log\|access.log" /etc/php-fpm.conf /etc/php-fpm.d/*.conf
    • 查看 Web 服务:grep -n "ErrorLog\|CustomLog" /etc/httpd/conf/httpd.conf /etc/nginx/nginx.conf

二 核心配置步骤

  • PHP 错误日志(php.ini)
    • 建议生产环境:error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
    • 开启并记录到文件:log_errors = Onerror_log = /var/log/php_errors.log
    • 安全显示:display_errors = Off(避免泄露敏感信息)。
  • PHP-FPM 日志(池配置 www.conf)
    • 开启日志与路径:php_admin_flag[log_errors] = onphp_admin_value[error_log] = /var/log/php-fpm/error.log
    • 捕获子进程输出:catch_workers_output = yes
    • 可选访问日志:access.log = /var/log/php-fpm/access.log
  • Web 服务器日志(按需优化)
    • Nginxerror_log /var/log/nginx/error.log warn; access_log /var/log/nginx/access.log main buffer=32k flush=300s;
    • ApacheLogLevel warnErrorLog /var/log/httpd/error_logCustomLog /var/log/httpd/access_log combined
  • 生效方式
    • 修改 php.ini 后重启 httpdphp-fpm;修改 php-fpm 池配置 后重启 php-fpm;修改 Nginx/Apache 后重启对应服务。

三 日志轮转与清理

  • 使用 logrotate 管理 PHP-FPM 日志(/etc/logrotate.d/php-fpm)
    • 示例:
      /var/log/php-fpm/*.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root adm
          sharedscripts
          postrotate
              if [ -f /var/run/php-fpm/php-fpm.pid ]; then
                  kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`
              fi
          endscript
      }
      
    • 说明:rotate 7 保留 7 份,compress 压缩旧日志,postrotatephp-fpm 发送 USR2 触发日志重新打开。
  • 使用 logrotate 管理 PHP 错误日志(/etc/logrotate.d/php)
    • 示例:
      /var/log/php_errors.log {
          daily
          missingok
          rotate 7
          compress
          notifempty
          create 0640 root adm
      }
      
  • 测试与生效
    • 手动测试:logrotate -f /etc/logrotate.d/php-fpmlogrotate -f /etc/logrotate.d/php
    • 验证轮转文件与权限是否正确生成。
  • 清理策略
    • 可在 logrotate 中通过 rotate N 控制保留份数;如确需定时清理,可用 cron
      • 示例:0 0 * * * find /var/log/php* -type f -name "*.gz" -mtime +7 -delete(删除 7 天前的压缩日志)。

四 监控与最佳实践

  • 实时监控
    • 跟踪日志:tail -f /var/log/php_errors.logtail -f /var/log/php-fpm/error.log
    • 分析工具:logwatch 等,可定期汇总与告警。
  • 性能与噪声控制
    • 生产环境避免记录过多级别(如 E_NOTICE/E_STRICT),并关闭浏览器显示错误。
    • 高并发场景可使用异步日志(如 Monolog 结合 Handler)降低性能影响。
  • 集中式日志
    • 大规模或分布式部署建议接入 ELK Stack(Elasticsearch, Logstash, Kibana)Graylog,便于检索、可视化与告警。

0