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/bash
find /path/to/project/runtime/log/ -type f -name "*.log" -mtime +7 -exec rm -f {} \;
chmod +x clean_thinkphp_logs.sh
crontab -e
添加以下内容(每天凌晨2点执行):0 2 * * * /path/to/clean_thinkphp_logs.sh
确保Web服务器用户(Debian默认为www-data)对日志目录有正确的写入权限,避免因权限问题导致日志无法记录:
chown -R www-data:www-data runtime/log/ # 将日志目录属主和属组设为www-data
chmod -R 755 runtime/log/ # 设置目录权限为755(所有者可读写执行,其他用户可读执行)
syslog驱动配置:// config/log.php
return [
'type' => 'syslog',
'ident' => 'thinkphp', // 日志标识
'facility' => LOG_LOCAL0, // 日志设备(如LOG_LOCAL0~LOG_LOCAL7)
];
format参数调整日志输出格式,例如添加请求ID:// config/log.php
return [
'format' => '{date} [{time}] [{request_id}] {level} {message}', // 包含请求ID
'date_format' => 'Y-m-d', // 日期格式
];