温馨提示×

thinkphp在centos中的日志如何管理

小樊
39
2025-12-09 12:52:23
栏目: 编程语言

ThinkPHP 在 CentOS 的日志管理实践

一 默认路径与级别

  • 默认日志目录为项目根目录下的 runtime/log/,常见按天生成文件(如:YYYY-mm-dd.log)。
  • 日志级别从低到高:debug → info → notice → warning → error → critical → alert → emergency;在配置中设置 level 可只保留高于等于该级别的日志(如仅记录 error)。
  • 快速记录示例:
    • 使用门面:
      • Log::info(‘用户登录’, [‘user_id’ => 1]);
      • Log::error(‘支付失败’, [‘order_id’ => 1001]);
    • 使用助手函数:
      • trace(‘错误信息’, ‘error’);
  • 手动写入与保存:
    • Log::record(‘消息’, ‘notice’);(先写入内存)
    • Log::save();(在请求结束或手动触发时落盘)
    • Log::write(‘立即写入’, ‘warning’);(实时写入)
  • 版本要点:
    • 5.0.4+ 命令行模式会自动定时写入;
    • 5.0.16+ 支持文件日志自动清理(配合 max_files 限制保留数量)。

二 在 CentOS 进行日志轮转

  • 推荐优先使用框架内置的文件日志保留策略(简单、可靠):
    • config/log.php 的 file 通道中设置保留文件数,例如:
      • ‘max_files’ => 30(仅保留最近 30 个日志文件,超出自动清理)
  • 若需与系统统一运维策略,可用 logrotate 管理 ThinkPHP 日志目录(适合多项目、集中采集场景):
    • 创建配置:/etc/logrotate.dphp
    • 示例配置(按天轮转、保留 7 天、压缩、自动创建新文件):
      • /var/www/your-project/runtime/log/*.log {
        • daily
        • rotate 7
        • compress
        • missingok
        • notifempty
        • create 644 www-data www-data
        • copytruncate
          }
    • 说明:
      • 路径请替换为你的实际 runtime/log 绝对路径;
      • copytruncate 可在不重启应用的情况下清空原文件继续写入,适合文件句柄被长期占用的场景;
      • 测试与生效:
        • 手动测试:logrotate -f /etc/logrotate.dphp
        • 日常由 /etc/cron.daily/logrotate 每日自动执行。

三 集中采集与可视化(可选)

  • 使用 Filebeat → Logstash → Elasticsearch → Kibana 集中管理与检索日志:
    • Filebeat 读取 ThinkPHP 日志,针对堆栈多行日志可设置多行合并,例如以 ----- 开头的行作为新事件起始:
      • filebeat.inputs:
        • type: log
        • paths:
          • /var/www/your-project/runtime/log/*.log
        • multiline.pattern: ‘^-’
        • multiline.negate: true
        • multiline.match: after
        • encoding: utf-8
    • 将处理后的日志送入 Logstash/ES 后在 Kibana 中检索、分析与告警。

四 常见问题与运维建议

  • 目录权限:确保 runtime/logWeb/CLI 运行用户可写(如 www-datanginx 用户),否则会出现日志不写入。
  • 日志不写入:检查是否误将日志类型设为 test(该类型不写磁盘);如需临时关闭可如此设置,排查完请恢复为 file
  • 日志过大:优先使用框架的 max_files 控制保留数量;若采用 logrotate,可结合 sizerotate 控制体积与周期。
  • 敏感信息:避免在生产日志中记录 密码、密钥、卡号 等敏感数据。
  • 实时排查:开发/排错时可用 tail -f runtime/log/YYYY-mm-dd.log 实时查看最新日志。

0