Ubuntu下PHP日志配置技巧
导读:Ubuntu下PHP日志配置技巧 一 核心配置与路径定位 使用命令定位配置文件:php --ini,常见路径为:/etc/php/{version}/{sapi}/php.ini(如 /etc/php/8.1/apache2/php.in...
Ubuntu下PHP日志配置技巧
一 核心配置与路径定位
- 使用命令定位配置文件:php --ini,常见路径为:/etc/php/{ version} /{ sapi} /php.ini(如 /etc/php/8.1/apache2/php.ini、/etc/php/8.1/fpm/php.ini、/etc/php/8.1/cli/php.ini)。修改前先备份:sudo cp php.ini php.ini.bak。
- 常用 php.ini 关键项(生产建议):
- error_reporting = E_ALL(记录所有错误)
- display_errors = Off(不在浏览器暴露错误)
- log_errors = On(开启错误日志)
- error_log = /var/log/php_errors.log(自定义错误日志路径)
- 生效方式:
- Apache:sudo systemctl restart apache2
- Nginx + PHP-FPM:sudo systemctl restart php{ version} -fpm 与 sudo systemctl restart nginx
- 注意区分 CLI 与 FPM/Apache 的配置,二者可能分别使用不同的 php.ini。
二 日志轮转与权限安全
- 使用 logrotate 管理 PHP 错误日志,新建:/etc/logrotate.d/php
- 示例配置(按天轮转、保留 7 天、压缩、自动创建并设置权限):
/var/log/php_errors.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
- 要点:确保日志目录与文件可被 PHP 进程写入(属主/属组与权限合理),避免日志因磁盘占满导致服务异常。
三 访问日志与FPM慢日志
- Web 访问日志(用于记录请求,与 PHP 错误日志互补):
- Apache:在虚拟主机或主配置中使用
- CustomLog ${ APACHE_LOG_DIR} /access.log combined
- Nginx:在 server 配置中使用
- access_log /var/log/nginx/access.log;
- Apache:在虚拟主机或主配置中使用
- PHP-FPM 慢日志(定位性能瓶颈):在 /etc/php/{
version}
/fpm/pool.d/www.conf 中启用
- slowlog = /var/log/php-fpm/www-slow.log
- request_slowlog_timeout = 5s(示例:超过 5 秒 的请求记录堆栈)
- 修改 FPM 后重启:sudo systemctl restart php{ version} -fpm。
四 实时查看与常用分析命令
- 实时查看:
- Apache:sudo tail -f /var/log/apache2/error.log
- Nginx:sudo tail -f /var/log/nginx/error.log
- PHP-FPM:sudo tail -f /var/log/php-fpm.log 或 /var/log/php{ version} -fpm.log
- 快速分析:
- 统计错误级别出现次数:grep -E ‘error|warning|notice’ /var/log/php_errors.log | wc -l
- 查找特定错误:grep ‘SQLSTATE[42S22]’ /var/log/php_errors.log
- Nginx 访问量前 10 的 IP:
- cat /var/log/nginx/access.log | awk ‘{ print $1} ’ | sort | uniq -c | sort -nr | head -10
- 提示:不同系统与配置下日志路径可能略有差异,必要时检查 Web 服务器与 PHP-FPM 的配置文件。
五 应用层日志与最佳实践
- 使用 Monolog 记录业务日志(便于分级、轮转与多目标输出):
- 安装:composer require monolog/monolog
- 示例(按文件大小保留 7 个历史文件):
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
$log = new Logger('app');
$log->
pushHandler(new RotatingFileHandler('/var/log/my_app.log', 7));
$log->
error('Something went wrong', ['context' =>
'value']);
- 最佳实践清单:
- 生产环境务必 display_errors = Off,仅用 log_errors = On 写入日志;
- 为 PHP 错误日志与 FPM 日志配置 logrotate;
- 为 FPM 启用 slowlog 与合理的 request_slowlog_timeout;
- 使用 Monolog 等库做业务日志分级与结构化输出;
- 定期审计日志目录权限与磁盘使用,避免日志膨胀影响服务。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下PHP日志配置技巧
本文地址: https://pptw.com/jishu/750343.html
