1. 使用logrotate工具自动轮转与压缩日志
logrotate是Ubuntu系统自带的日志管理工具,可自动分割、压缩旧日志并保留指定天数,有效防止日志文件无限增长。
sudo apt-get install logrotate/etc/logrotate.d/php文件,添加以下内容(以/var/log/php_errors.log为例):/var/log/php_errors.log {
daily # 每天轮转一次
missingok # 若日志不存在也不报错
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(如.gz格式)
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件并设置权限
}
保存后,logrotate会按配置自动处理日志,无需手动干预。2. 调整PHP日志级别减少不必要的日志
过高的日志级别(如E_ALL)会记录所有信息(包括notice、warning等),导致日志量激增。可根据需求调整日志级别,仅记录关键错误。
/etc/php/{版本}/apache2/php.ini或/etc/php/{版本}/cli/php.ini),修改以下参数:error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING # 仅记录错误(E_ERROR),排除notice和warning
display_errors = Off # 关闭浏览器显示错误(防止敏感信息泄露)
log_errors = On # 启用日志记录
error_log = /var/log/php_errors.log # 指定日志文件路径
error_reporting()函数,例如:error_reporting(E_ERROR | E_PARSE); // 仅记录致命错误和语法错误
修改后需重启Web服务器(sudo systemctl restart apache2或sudo systemctl restart nginx)使配置生效。3. 使用Monolog库实现灵活日志管理
Monolog是PHP常用的日志库,支持日志分级、多处理器(如文件、数据库、邮件)、日志分割等功能,比原生PHP日志更强大。
composer require monolog/monolog
RotatingFileHandler实现按大小或天数分割日志(例如每天分割,保留7天):require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
$log = new Logger('my_app'); // 日志通道名称
$log->pushHandler(new RotatingFileHandler('/var/log/my_app.log', 7)); // 保留7天的日志文件
$log->error('This is an error message'); // 记录错误日志
Monolog会自动处理日志分割,无需额外配置。4. 手动或定时清理旧日志文件
若日志已过大,可通过以下方式快速清理:
/var/log),执行以下命令删除指定日志文件:rm /var/log/php_errors.log # 直接删除(谨慎操作,确保日志无用)
truncate -s 0 /var/log/php_errors.log # 将文件大小截断为0字节
/usr/local/bin/clean_php_logs.sh脚本:#!/bin/bash
find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \; # 删除30天前的.log文件
添加执行权限并设置cron任务:chmod +x /usr/local/bin/clean_php_logs.sh
echo "0 3 * * * /usr/local/bin/clean_php_logs.sh" | sudo tee -a /etc/crontab # 每天凌晨3点运行
注意:清理前需确认日志文件无重要信息,避免误删。5. 将日志发送至系统日志(syslog)集中管理
将PHP日志发送至系统日志(如/var/log/syslog),利用系统日志的工具(如logrotate、rsyslog)统一管理,减少单独日志文件的数量。
error_log指向syslog:error_log = syslog
syslog()函数记录日志:openlog("my_php_app", LOG_PID | LOG_PERROR, LOG_LOCAL0); // 打开syslog连接
syslog(LOG_ERR, "This is an error message from PHP"); // 记录错误日志
closelog(); // 关闭连接
配置后,PHP日志会出现在/var/log/syslog或/var/log/messages中,可通过系统日志工具统一轮转和管理。