linux

Linux环境下ThinkPHP的日志管理

小樊
48
2025-10-07 21:41:41
栏目: 编程语言

一、日志配置管理
ThinkPHP的日志配置主要通过config/log.php文件实现,核心参数包括:

'channels' => [
    'prod_error' => [
        'type' => 'file',
        'path' => runtime_path('log/prod'),
        'level' => ['error', 'critical'],
        'max_files' => 90,
        'apart_level' => ['error'], // error级别单独文件
    ],
    'file' => [
        'type' => 'file',
        'path' => runtime_path('log'),
        'level' => ['info', 'warning'],
        'max_files' => 30,
    ],
],

二、日志记录方法
ThinkPHP提供静态Facade和类方法两种记录方式,支持上下文数据传递(数组自动转为JSON):

三、日志查看方式

  1. 直接查看文件:日志默认存储在runtime/log目录下,按日期或通道分文件(如2025-07-07.logprod_error.log),可通过catless等命令查看;
  2. 命令行工具:使用php think log命令查看所有日志,支持过滤级别(如php think log --level=error仅看错误日志)和通道(如php think log --channel=prod_error);
  3. 实时监控:通过tail -f runtime/log/prod_error.log实时查看错误日志更新,便于快速响应问题。

四、日志清理与维护

  1. 手动清理:直接删除runtime/log目录下不需要的日志文件(如rm -rf runtime/log/2025-06-*.log);
  2. 定时任务(logrotate):通过Linux的logrotate工具实现自动轮转,示例配置(/etc/logrotate.d/thinkphp):
    /path/to/runtime/log/*.log {
        daily                # 每天轮转
        rotate 30            # 保留30天
        compress             # 压缩旧日志(gzip)
        missingok            # 文件不存在不报错
        notifempty           # 空文件不轮转
        create 640 www-data www-data  # 新文件权限(www-data为Web用户)
        sharedscripts        # 所有文件处理完再执行脚本
        postrotate
            /usr/bin/find /path/to/runtime/log -name "*.gz" -mtime +90 -exec rm -f {} \;  # 删除90天以上的压缩日志
        endscript
    }
    

五、生产环境最佳实践

  1. 权限控制:确保runtime/log目录权限正确(如chmod 750 runtime/log,所有者为Web用户,组为可读),避免未授权访问;
  2. 日志分离:将错误日志、SQL日志、业务日志分离到不同通道(如prod_errorprod_sqlprod_business),便于分类分析;
  3. 敏感信息过滤:避免在日志中记录密码、密钥等敏感数据(可通过中间件或日志处理器过滤);
  4. 监控报警:通过max_files限制日志文件数量,结合find命令或监控工具(如Prometheus)监控日志大小,超过阈值时发送报警(如邮件、钉钉);
  5. 性能优化:高频日志(如访问日志)开启json格式并发送到日志收集系统(如ELK),减少磁盘IO;低频日志(如错误日志)保留长期(如90天)。

0
看了该问题的人还看了