ThinkPHP的日志配置主要在项目根目录的config/app.php
(部分版本为config/logging.php
)文件中完成,关键参数包括:
file
(文件存储,默认)、database
(数据库)、syslog
(系统日志)等,通过'type'
参数设置;runtime/log/
目录(通过'path'
参数自定义,如'path' => './runtime/custom_logs/'
);DEBUG
(调试)、INFO
(信息)、WARN
(警告)、ERROR
(错误)、FATAL
(致命),如'level' => ['ERROR', 'FATAL']
仅记录严重错误;'format'
参数自定义,如'{date} [{time}] {level} {message}'
(包含日期、时间、级别、消息);'expire'
参数(单位:天),自动删除超过指定天数的日志,如'expire' => 30
保留30天内的日志。20250930.log
),存储在runtime/log/
目录下,可通过cat
、less
或vim
命令查看,如cat /var/www/html/project/runtime/log/20250930.log
;php think log
命令查看所有日志文件内容,支持过滤级别(如php think log --level=error
仅查看错误日志)。runtime/log/
目录下的日志文件(如rm -rf /var/www/html/project/runtime/log/*.log
),适用于临时清理;'expire'
参数,ThinkPHP会自动清理过期日志(如'expire' => 7
每天清理7天前的日志);crontab
设置定期清理,例如每天凌晨2点清理30天前的日志:# 编辑定时任务
crontab -e
# 添加以下内容(路径替换为实际项目路径)
0 2 * * * find /var/www/html/project/runtime/log/ -type f -name "*.log" -mtime +30 -exec rm -rf {} \;
或创建脚本/usr/local/bin/clear_thinkphp_log.sh
,内容如下:#!/bin/bash
LOG_DIR="/var/www/html/project/runtime/log"
find "$LOG_DIR" -type f -name "*.log" -mtime +30 -exec rm -rf {} \;
然后赋予执行权限并添加到Cron:chmod +x /usr/local/bin/clear_thinkphp_log.sh
echo "0 2 * * * /usr/local/bin/clear_thinkphp_log.sh" >> /etc/crontab
logrotate
工具实现日志分割和压缩,避免单个日志文件过大。创建/etc/logrotate.d/thinkphp
文件,内容如下:/var/www/html/project/runtime/log/*.log {
daily # 每天轮转
rotate 30 # 保留30个备份
compress # 压缩旧日志
missingok # 忽略缺失文件
notifempty # 空文件不轮转
create 0644 www-data www-data # 创建新日志文件并设置权限(www-data为Apache/Nginx用户)
sharedscripts # 所有日志处理完成后执行脚本
postrotate
/usr/bin/systemctl reload httpd >/dev/null 2>&1 || true # 重启Web服务(根据实际情况调整)
endscript
}
手动测试轮转:logrotate -vf /etc/logrotate.d/thinkphp
;rsyslog
或syslog-ng
将ThinkPHP日志发送到远程日志服务器(如ELK、Graylog),便于集中分析和存储。runtime/log/
目录的权限允许Web服务器用户(如www-data
、apache
)写入,避免日志无法记录;