在Ubuntu系统中,监控PHP日志的方法主要取决于日志的存储位置(如Apache/Nginx错误日志、PHP-FPM日志)及监控需求(实时查看、异常检测、可视化分析)。以下是具体步骤:
PHP日志的位置因Web服务器类型(Apache/Nginx)和PHP运行模式(mod_php/PHP-FPM)而异,常见路径如下:
/var/log/apache2/error.log;/var/log/nginx/error.log;/var/log/php-fpm.log或/var/log/php7.x-fpm.log(x为PHP版本号,如7.4、8.1),具体路径可通过/etc/php/{version}/fpm/pool.d/www.conf中的error_log配置项确认。tail命令实时监控日志tail -f是实时查看日志新增内容的经典工具,适用于快速排查问题。
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php-fpm.log # 或/var/log/php7.4-fpm.log(根据版本调整)
按Ctrl+C可停止监控。
multitail同时监控多个日志若需同时查看多个日志文件(如Apache+Nginx+PHP-FPM),可使用multitail工具(支持分屏、颜色高亮)。
multitail:sudo apt install multitail
sudo multitail /var/log/apache2/error.log /var/log/nginx/error.log /var/log/php-fpm.log
该工具会分屏显示各日志文件的内容,便于对比分析。
若需自定义监控逻辑(如过滤特定错误、发送告警),可编写PHP脚本读取日志文件的增量内容。
<?php
$logFile = '/var/log/php-fpm.log'; // 替换为目标日志路径
$fileSize = filesize($logFile);
while (true) {
clearstatcache(); // 清除文件状态缓存
$currentSize = filesize($logFile);
if ($currentSize > $fileSize) {
$handle = fopen($logFile, 'r');
fseek($handle, $fileSize); // 定位到上次读取位置
$content = fread($handle, $currentSize - $fileSize); // 读取新增内容
fclose($handle);
echo $content; // 输出到终端(可替换为写入文件或发送告警)
$fileSize = $currentSize;
}
sleep(1); // 避免频繁读取
}
将脚本保存为log_monitor.php,通过php log_monitor.php运行。
对于大规模或长期日志监控,建议使用专业工具实现日志收集、存储、分析与告警:
/etc/logrotate.d/(如php-fpm的轮换配置);ubuntu)有权限读取日志文件(可通过sudo或调整文件权限解决);php.ini中的log_errors=On、error_log路径)及Web服务器配置(如Nginx的fastcgi_pass是否指向PHP-FPM);通过上述方法,可灵活实现Ubuntu系统中PHP日志的实时监控、异常排查及长期管理。