温馨提示×

Linux环境下ThinkPHP的日志管理

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

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

  • 默认通道default指定全局使用的日志通道(如file);
  • 通道列表channels定义具体通道配置,每个通道支持以下关键参数:
    • type:日志驱动(默认file,可选databaseemail、自定义类等);
    • path:日志存储路径(默认runtime/log,可自定义日期格式如runtime/log/YYYY-mm-dd.log);
    • level:记录级别(从低到高为debuginfonoticewarningerrorcriticalalertemergency,可过滤低级别日志);
    • max_files:最大日志文件数(0表示不限,避免磁盘占满);
    • json:是否以JSON格式记录(便于ELK等工具收集);
    • apart_level:单独记录的日志级别(如error级别单独存文件,便于快速定位问题)。
      示例配置(生产环境分离错误日志):
'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):

  • 基础用法Log::write('手动记录日志', 'info')(需手动触发);
  • 快捷方法Log::info('用户登录成功', ['user_id' => 1])Log::error('数据库连接失败', ['host' => '127.0.0.1'])
  • 异常日志:系统捕获异常后会自动记录error级别日志(无需手动处理);
  • SQL日志:开启config/database.php中的trigger_sqlAPP_DEBUG=true时默认开启),记录执行的SQL语句及耗时。

三、日志查看方式

  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