温馨提示×

centos中thinkphp日志如何管理

小樊
40
2025-11-15 20:08:49
栏目: 编程语言

CentOS 下 ThinkPHP 日志管理

一 日志位置与保留策略

  • 默认位置:ThinkPHP 的日志通常写入项目的 runtime/log/(系统/业务日志)与 runtime/sql/(SQL 日志)目录,按应用与环境区分。生产环境建议按级别与用途拆分通道,并配置按日/按大小滚动与保留天数,避免单文件过大与无限增长。示例(适用于 ThinkPHP 6,位于 config/log.php):
return [
    'default' => env('log.channel', 'stack'),
    'channels' => [
        'stack' => [
            'type'   => 'stack',
            'channels' => ['daily', 'error_file', 'emergency'],
        ],
        'daily' => [
            'type'       => 'file',
            'path'       => runtime_path('logs/daily'),
            'level'      => ['info','notice','warning'],
            'max_files'  => 30,         // 保留30天
            'file_size'  => 10485760,    // 10MB分割
            'json'       => false,
        ],
        'error_file' => [
            'type'       => 'file',
            'path'       => runtime_path('logs/error'),
            'level'      => ['error','critical'],
            'max_files'  => 90,         // 保留90天
            'apart_level'=> true,        // 每个级别单独文件
            'file_size'  => 20971520,    // 20MB分割
            'json'       => true,         // 便于检索分析
        ],
        'emergency' => [
            'type'       => 'file',
            'path'       => runtime_path('logs/emergency'),
            'level'      => ['emergency'],
            'max_files'  => 365,        // 保留1年
        ],
    ],
];
  • 说明:不同版本目录与配置结构略有差异,但“按级别拆分 + 按大小/时间滚动 + 设置保留份数”是通用原则。若使用框架自带或扩展的清理能力,也可在配置中设置如 clear_time(单位:天)实现定期清理(以实际版本支持为准)。

二 清理与归档方案

  • 系统级定时清理(推荐)
    • 使用 Linux 的 crontabfind 定期删除旧日志,安全可控。示例:
      • 30 分钟清理 10 天前的日志文件:
        1. 新建脚本:/usr/local/bin/clear_log
        #!/bin/sh
        find /var/www/your-app/runtime/logs  -mtime +10 -name "*.log" -delete
        find /var/www/your-app/runtime/sql   -mtime +10 -name "*.log" -delete
        
        1. 赋权:chmod +x /usr/local/bin/clear_log
        2. 加入计划任务:crontab -e
        */30 * * * * /usr/local/bin/clear_log
        
      • 如需按分钟清理临时日志:find /tmp -type f -mmin +120 -name “*.log” -delete
    • 建议将日志目录加入监控与告警,避免因误删或清理失败导致磁盘占满。
  • 应用内清理(可选)
    • 通过 ThinkPHP 自定义命令(Command)按时间清理 runtime/logs/runtime/sql/,配合系统计划任务每日/每周执行,便于在清理前做归档或压缩。

三 集中化采集与分析(ELK 或兼容栈)

  • 使用 Filebeat → Logstash → Elasticsearch → Kibana 集中采集与检索 ThinkPHP 日志:
    • Filebeat 采集日志并做多行合并,解决 Java/ThinkPHP 堆栈跨行问题。示例(/etc/filebeat/filebeat.yml 片段):
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/www/*/runtime/logs/*.log
  multiline.pattern: '^-'
  multiline.negate: true
  multiline.match: after
  encoding: utf-8
output.logstash:
  hosts: ["logstash:5044"]
  • 说明:上述多行规则以日志行首的 “-----”“Caused by:” 作为合并起点,便于在 Kibana 中按单条异常完整展示。

四 权限与运行维护要点

  • 运行用户与目录权限:确保 PHP-FPM/Apache/Nginx 运行用户对 runtime/ 及子目录拥有写权限(常见为 www-datanginx 用户,视部署而定)。
  • 日志轮转与保留:优先使用“按大小 + 按数量/天数”的滚动策略,避免仅依赖系统 logrotate;为错误与审计类日志设置更长保留期。
  • 敏感信息:避免记录 password、token、credit_card 等敏感字段;若写入数据库或外部服务,建议在日志驱动或格式化层进行脱敏。
  • 监控与告警:对 磁盘使用率、日志写入失败、日志采集异常设置阈值告警,防止因日志问题引发线上故障。

0