Ubuntu环境下ThinkPHP日志管理指南
ThinkPHP的日志配置主要在application/config.php(或.env环境变量)中完成,关键参数包括:
file(文件存储),支持database(数据库)、syslog(系统日志)等扩展驱动;runtime/log/(相对项目根目录),可通过path参数自定义(如/var/log/thinkphp/);DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(错误)、FATAL(致命)等级别,可根据环境调整(生产环境建议设为ERROR及以上);expire参数设置(如expire => 7表示保留7天),或使用clear_time参数(如clear_time => 1表示每天自动清理过期日志)。config.php):'log' => [
'type' => 'file',
'path' => runtime_path('logs'), // 确保目录存在且有写入权限
'level' => ['ERROR', 'FATAL'], // 生产环境仅记录错误及以上级别
'expire' => 30, // 日志保留30天
],
runtime/log/目录下,按日期分文件(如20251010.log)。可通过cat、less或tail命令查看:tail -f /path/to/project/runtime/log/20251010.log # 实时查看最新日志
less /path/to/project/runtime/log/20251009.log # 分页查看历史日志
php think log命令可快速查看所有日志文件的内容,支持按级别过滤(如php think log --level=error仅查看错误日志)。直接删除runtime/log/和runtime/sql/(SQL日志,默认开启)目录下的文件:
rm -rf /path/to/project/runtime/log/* # 清理所有日志文件
rm -rf /path/to/project/runtime/sql/* # 清理SQL日志
注意:清理前需停止Web服务(如Apache/Nginx),避免文件占用导致删除失败。
config.php中设置expire或clear_time参数,框架会在每次请求时自动清理过期日志(如clear_time => 1表示每天清理一次)。# 编辑Cron任务
crontab -e
添加以下内容:0 2 * * * find /path/to/project/runtime/log/ -name "*.log" -mtime +30 -exec rm -rf {} \;
0 2 * * * find /path/to/project/runtime/sql/ -name "*.log" -mtime +30 -exec rm -rf {} \;
保存后,Cron会自动执行清理任务。runtime/目录权限正确,避免未授权访问。在入口文件(public/index.php)中添加:umask(0027); // 设置目录权限为750(所有者可读写执行,组用户可读执行,其他用户无权限)
或通过chmod命令设置:chmod -R 750 /path/to/project/runtime/
chown -R www-data:www-data /path/to/project/runtime/ # 假设Web用户为www-data
logrotate工具对日志进行分割和压缩,减少磁盘占用。创建/etc/logrotate.d/thinkphp文件,内容如下:/path/to/project/runtime/log/*.log {
daily # 每天分割
rotate 30 # 保留30份
missingok # 文件不存在时不报错
notifempty # 文件为空时不分割
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免当天日志被压缩)
sharedscripts # 所有日志处理完成后执行脚本
postrotate
/usr/bin/systemctl reload php-fpm > /dev/null # 重启PHP-FPM(确保框架重新打开日志文件)
endscript
}
启用logrotate:systemctl enable logrotate
systemctl start logrotate
// 在日志记录前过滤敏感字段
$message = str_replace(['password' => '******', 'phone' => '******'], $message);
Log::error($message);
public function paymentNotify()
{
Log::close(); // 关闭日志
// 业务逻辑处理...
Log::init(); // 恢复日志
}
通过以上步骤,可实现Ubuntu环境下ThinkPHP日志的有效管理,确保日志的安全性、可用性和系统性能。