Debian系统上ThinkPHP日志管理指南

ThinkPHP的日志配置主要通过项目配置文件实现,支持自定义日志级别、存储路径、轮转策略等。
config/log.php(部分版本为config.php中的log节点)。file(文件存储),支持database(数据库)、syslog(系统日志)等类型;path参数指定日志目录,默认为runtime/log/(需确保Web服务器用户对该目录有写入权限);level参数设置记录的日志级别,可选DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(错误)、FATAL(致命),生产环境建议设置为ERROR及以上;max_file(保留日志文件数量,如30表示保留30个文件)和day(是否按天轮转,true表示开启)控制日志文件大小和数量。ThinkPHP提供Log门面类用于记录不同级别的日志,支持传入上下文信息(如请求ID、用户ID)以便追踪。
Log::debug('调试信息', 'category'):记录调试日志;Log::info('业务信息', 'order'):记录业务日志(如订单创建);Log::error('错误信息', 'db'):记录错误日志(如数据库连接失败);Log::sql('SELECT * FROM users'):专门记录SQL语句(默认级别为notice)。Log::error('订单支付失败', ['order_id' => 123, 'user_id' => 456]),日志会包含这些上下文,便于后续分析。runtime/log/目录下,按日期或级别生成文件(如20251012.log、error.log),可使用tail、cat等命令查看:tail -f runtime/log/error.log# 实时查看错误日志cat runtime/log/20251012.log # 查看指定日期日志php think log命令快速检索日志,支持过滤级别和关键词:php think log --level=error# 查看所有错误日志php think log --keyword="订单"# 查找包含“订单”的日志为避免日志文件占用过多磁盘空间,需定期清理过期日志,可通过以下两种方式实现:
runtime/log/目录下不需要的日志文件(如7天前的日志):rm -f runtime/log/*.log# 删除所有.log文件(谨慎使用)cron定时执行清理脚本,例如每天凌晨2点删除7天前的日志:clean_thinkphp_logs.sh:#!/bin/bashfind /path/to/project/runtime/log/ -type f -name "*.log" -mtime +7 -exec rm -f {} ;chmod +x clean_thinkphp_logs.shcrontab -e添加以下内容(每天凌晨2点执行):0 2 * * * /path/to/clean_thinkphp_logs.sh确保Web服务器用户(Debian默认为www-data)对日志目录有正确的写入权限,避免因权限问题导致日志无法记录:
chown -R www-data:www-data runtime/log/# 将日志目录属主和属组设为www-datachmod -R 755 runtime/log/ # 设置目录权限为755(所有者可读写执行,其他用户可读执行)syslog驱动配置:// config/log.phpreturn ['type' => 'syslog','ident' => 'thinkphp',// 日志标识'facility' => LOG_LOCAL0, // 日志设备(如LOG_LOCAL0~LOG_LOCAL7)];format参数调整日志输出格式,例如添加请求ID:// config/log.phpreturn ['format' => '{date} [{time}] [{request_id}] {level} {message}', // 包含请求ID'date_format' => 'Y-m-d', // 日期格式];