在Ubuntu环境下管理ThinkPHP日志,可结合系统特性与框架功能,从配置、存储、清理、监控等方面制定策略,核心要点如下:
config/log.php,设置日志通道、级别、路径等参数。例如:return [
'default' => 'file', // 默认通道
'channels' => [
'file' => [
'type' => 'file',
'path' => runtime_path('logs'), // 日志存储路径(可自定义)
'level' => ['info', 'error'], // 记录级别
'max_files' => 30, // 单一日志文件最大数量
'file_size' => 10, // 单个文件最大10MB,超过自动分割
'json' => true, // 输出JSON格式,便于ELK等工具分析
],
'error' => [ // 错误日志单独通道
'type' => 'file',
'path' => runtime_path('logs/error'),
'level' => ['error', 'critical'],
'apart_level' => true, // 每个级别单独文件
'max_files' => 90,
],
],
];
debug模式,仅记录error及以上级别日志,避免敏感信息泄露。runtime/log/目录,可通过配置修改为其他路径(如/var/log/thinkphp/),并确保目录权限正确:sudo mkdir -p /var/log/thinkphp
sudo chown -R www-data:www-data /var/log/thinkphp # 假设Web用户为www-data
sudo chmod -R 750 /var/log/thinkphp
umask设置默认权限(如umask(0027)),确保日志文件仅对所属用户和组可写。logrotate工具配置定时任务,按天数或大小分割并压缩旧日志。示例配置(/etc/logrotate.d/thinkphp):/var/log/thinkphp/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
# 可选:重启应用或重新加载日志配置
endscript
}
rm命令删除过期日志,或使用find命令批量清理:# 删除30天前的日志
find /var/log/thinkphp -name "*.log" -mtime +30 -exec rm -f {} \;
tail -f命令实时监控日志文件:tail -f /var/log/thinkphp/daily.log
grep、awk等工具筛选日志,例如统计错误日志数量:grep "error" /var/log/thinkphp/*.log | wc -l
Monolog的异步处理器(如AsyncProcessor),避免日志写入阻塞业务逻辑。Log::batch(true)开启批量写入,减少磁盘I/O操作。参考来源: