一、ThinkPHP日志配置(Linux环境适配)
ThinkPHP的日志配置主要通过config/log.php(ThinkPHP 6+)或config/app.php(旧版本)文件完成,核心参数需根据Linux环境调整:
runtime/log/子目录下(如runtime/log/2025-10-14.log,按天分割)。需确保该目录存在且具备可写权限(建议设置为chmod -R 755 runtime/log,避免因权限问题导致日志无法写入)。debug(调试信息)、info(常规运行信息)、notice(通知)、warning(警告)、error(错误)、critical(严重错误)、alert(警报)、emergency(紧急)等级别。可根据需求过滤日志,例如生产环境设置为['error', 'warning']以减少日志量。file(文件存储),也支持database(数据库)、syslog(系统日志)、email(邮件报警)等驱动。若需自定义驱动,需继承think\log\driver\File类并重写format等方法。二、日志查看方法
runtime/log/目录,使用ls查看按日期命名的日志文件(如2025-10-14.log),用cat、less或tail命令查看内容。例如:cd /path/to/project/runtime/log
tail -f 2025-10-14.log # 实时查看最新日志
less 2025-10-14.log # 分页查看历史日志
php think log命令快速查看所有日志文件内容,支持按级别过滤(如php think log --level=error仅查看错误日志)。三、日志清理与轮转
runtime/log/目录下不需要的日志文件(如超过30天的日志),例如:rm -rf /path/to/project/runtime/log/*.log # 删除所有.log文件(谨慎使用)
cron设置定期清理任务,例如每天凌晨2点删除7天前的日志:crontab -e
# 添加以下内容(需替换为实际路径)
0 2 * * * find /path/to/project/runtime/log -name "*.log" -mtime +7 -exec rm -f {} \;
logrotate实现自动轮转,避免单个日志文件过大。在/etc/logrotate.d/目录下创建thinkphp配置文件(如thinkphp.conf),内容如下:/path/to/project/runtime/log/*.log {
daily # 每天轮转
rotate 30 # 保留30天日志
compress # 压缩旧日志(节省空间)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
create 755 www-data www-data # 创建新日志文件并设置权限(www-data为Apache/Nginx用户)
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/usr/bin/php /path/to/project/think log:clear # 可选:调用ThinkPHP命令清理旧日志
endscript
}
保存后,logrotate会自动按配置执行轮转。四、高级管理技巧
config/log.php中配置自定义通道。例如,写入数据库:'channels' => [
'db' => [
'type' => 'database',
'table' => 'logs', // 数据库表名(需提前创建)
'connection' => 'mysql', // 数据库连接配置(需与项目配置一致)
],
]
使用时通过Log::channel('db')->info('订单创建', ['order_id' => 2001])记录日志。think\log\driver\File类并重写format方法,例如添加请求IP、用户ID等信息。tail -f命令实时监控日志变化,快速定位线上问题(如tail -f runtime/log/2025-10-14.log | grep "error"仅监控错误日志)。五、注意事项
runtime/log/目录可被Web服务器用户(如www-data、apache)写入,否则会导致日志记录失败。max_files(默认30)限制日志文件数量,或使用logrotate避免磁盘空间耗尽。Log::record方法的第二个参数过滤(如Log::error('支付失败', ['order_id' => 1001])而非Log::error('支付失败,用户ID:'.$user_id))。