ThinkPHP在CentOS上的日志管理主要涉及配置、查看、清理及高级操作,具体如下:
一、基础配置
-
修改配置文件
在config/log.php中设置日志参数,如存储路径、级别、通道等:return [ 'default' => 'file', // 默认通道 'channels' => [ 'file' => [ 'type' => 'file', 'path' => runtime_path('logs'), // 日志目录(默认runtime/log) 'level' => ['info', 'error'], // 记录级别 'max_files' => 30, // 保留天数/文件数 ], 'db' => [ // 数据库日志(需提前创建表) 'type' => 'database', 'table' => 'system_logs', 'connection' => 'log_db', ], ], ];支持
file(文件)、database(数据库)、custom(自定义)等驱动。 -
动态切换通道
代码中可通过Log::channel('通道名')指定日志存储位置,如:Log::channel('db')->error('数据库异常', ['sql' => $sql]);
二、日志查看与监控
-
命令行查看
- 实时查看日志文件:
tail -f runtime/logs/2025-09-11.log # 按日期分割的日志文件 - 使用
journalctl查看系统日志(需配置rsyslog转发):journalctl -u nginx -f # 查看Nginx相关日志
- 实时查看日志文件:
-
日志文件管理
- 手动清理:直接删除
runtime/logs目录下过期文件。 - 自动轮转:通过CentOS的
logrotate工具配置定期切割(如按天/大小分割):# 示例:/etc/logrotate.d/thinkphp /path/to/runtime/logs/*.log { daily rotate 30 compress missingok create 0640 www-data adm }
- 手动清理:直接删除
三、高级功能
-
日志分级存储
将不同级别日志分离存储,例如:'channels' => [ 'error_file' => [ 'type' => 'file', 'path' => runtime_path('logs/error'), 'level' => ['error', 'critical'], 'apart_level' => true, // 每个级别单独文件 ], 'info_file' => [ 'type' => 'file', 'path' => runtime_path('logs/info'), 'level' => ['info', 'debug'], ], ], -
集成ELK等分析工具
- 将日志输出为JSON格式,便于ELK(Elasticsearch+Logstash+Kibana)分析:
'json_log' => [ 'type' => 'file', 'path' => runtime_path('logs/json'), 'json' => true, 'level' => ['info', 'error'], ], - 通过
rsyslog或Filebeat将日志实时传输至远程服务器。
- 将日志输出为JSON格式,便于ELK(Elasticsearch+Logstash+Kibana)分析:
-
权限与安全
- 确保
runtime/logs目录权限为640,避免敏感信息泄露:chmod 640 runtime/logs/* chown -R www-data:adm runtime/logs # 根据实际用户调整 - 敏感信息(如密码、token)需在记录前过滤。
- 确保
四、参考资料
- ThinkPHP日志配置:官方文档
- CentOS日志工具:
logrotate(官方文档)、journalctl(官方文档)