PHP日志分析是排查错误、优化性能、保障安全的关键环节。以下是最佳实践总结,涵盖配置、工具、分析方法及案例:
php.ini
:
ini
error_log = /var/log/php_errors.log
log_errors = On
display_errors = Off # 生产环境必须关闭
error_reporting = E_ALL # 开发环境记录全部错误
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT # 生产环境按需调整
php
ini_set('error_log', '/path/to/custom_errors.log');
error_reporting(E_ALL);
php
$errorData = [
'timestamp' => date('c'),
'level' => 'ERROR',
'message' => 'Database connection failed',
'file' => __FILE__,
'line' => __LINE__,
'context' => ['db_host' => 'localhost']
];
error_log(json_encode($errorData));
日志类型 | 记录内容 | 分析场景 |
---|---|---|
错误日志 | PHP 运行时错误、警告、通知 | 调试代码错误、语法问题 |
访问日志 | 用户请求 URL、IP、响应状态 | 分析慢请求、异常流量、攻击行为 |
应用日志 | 业务逻辑自定义事件 | 追踪用户行为、订单状态变更等 |
慢查询日志 | 执行时间超阈值的 SQL 查询 | 优化数据库性能 |
命令行分析:
# 查找最近1小时500错误
grep "PHP Fatal error" /var/log/php_errors.log --since "1 hour ago"
# 统计高频错误类型
awk '/PHP Warning/{count[$0]++} END{for (msg in count) print count[msg], msg}' php_errors.log | sort -nr
php_fpm_active_processes
)、慢请求占比。bash
# 查看进程池状态
sudo systemctl status php-fpm
# 分析慢请求(需配置 request_slowlog_timeout)
tail -f /var/log/php-fpm/slow.log
bash
# 搜索访问日志中的可疑字符串
grep -E 'union.*select|eval\(|%3Cscript' /var/log/nginx/access.log
logrotate
防止日志文件过大。
conf
/var/log/php_errors.log {
daily
rotate 30
compress
missingok
notifempty
}
通过以上实践,可系统化提升 PHP 应用的稳定性与可观测性。实际场景中需结合业务需求调整日志粒度,避免过度记录影响性能。