Ubuntu上ThinkPHP日志管理技巧
ThinkPHP的日志配置主要通过application/config.php文件完成,关键参数包括:
file(文件存储),支持database(数据库)、syslog(系统日志)等,可根据需求选择;runtime/log/,可通过path参数自定义(如/var/log/thinkphp/),需确保目录存在且具备写入权限;DEBUG、INFO、WARN、ERROR、FATAL,生产环境建议设置为ERROR(仅记录错误及以上级别),避免无关日志占用空间;format参数调整(如{date} [{time}] {level} {message}),可包含时间、级别、消息等信息,便于后续分析。think log命令快速查看日志,支持过滤级别(如php think log --level=error仅查看错误日志)和文件(如php think log --file=sql查看SQL日志),操作便捷;runtime/log/目录下,以日期命名(如20251027.log),可使用tail -f实时查看最新日志(如tail -f runtime/log/20251027.log)。runtime/log/目录下的旧日志文件(如rm -rf runtime/log/*.log),适用于临时清理;crontab -e添加定时任务,定期清理过期日志。例如,每天凌晨删除30天前的日志:0 0 * * * find /path/to/project/runtime/log/ -name "*.log" -mtime +30 -exec rm -rf {} \;
logrotate工具实现日志轮转与压缩,减少磁盘占用。创建/etc/logrotate.d/thinkphp配置文件,内容如下:/path/to/project/runtime/log/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 www-data adm
}
上述配置表示每天轮转日志,保留最近7天,压缩旧日志(compress),并设置正确的权限(640)。runtime/log/目录权限正确,避免未授权访问。建议设置为640(所有者可读写,组可读),并通过umask在入口文件(public/index.php)中强制生效:umask(0027); // 设置默认权限为640
location ~ ^/runtime/logs/ {
deny all;
return 403;
}
use think\facade\Log;
Log::sql('SELECT * FROM users WHERE id = 1'); // 默认级别为notice
可在配置中单独设置SQL日志级别(如'sql' => 'warning'),便于重点关注。config.php中的log参数:'log' => [
'type' => 'syslog',
'ident' => 'thinkphp', // 日志标识
'facility' => LOG_LOCAL0, // 日志设备
],
需确保服务器已安装并配置syslog服务。use think\facade\Log;
Log::close(); // 关闭日志
// 业务逻辑...
Log::init(); // 恢复日志