温馨提示×

ubuntu上thinkphp日志管理怎么做

小樊
36
2025-12-26 10:26:04
栏目: 编程语言

Ubuntu上ThinkPHP日志管理实操指南

一 基础配置与目录权限

  • 配置文件位置:新版在config/log.php,默认通道为file。常用参数:
    • path:日志存储目录(如:runtime/log
    • level:允许记录的级别(如:只记录 error 及以上)
    • single:是否单一文件(true 生成 single.log)
    • file_size:单文件大小上限(超出自动轮转备份)
    • max_files:最大保留文件数(超出自动清理)
    • apart_level:将指定级别单独文件记录(如:error、sql
    • realtime_write:是否实时写入(配合 record 使用)
  • 示例(config/log.php 片段):
    return [
        'default' => 'file',
        'level'   => ['error','warning','info'],
        'channels' => [
            'file' => [
                'type'           => 'File',
                'path'           => runtime_path() . 'log',
                'single'         => false,
                'file_size'      => 10 * 1024 * 1024, // 10MB
                'max_files'      => 30,
                'apart_level'    => ['error','sql'],
                'realtime_write' => false,
                'format'         => '[%s][%s] %s',
            ],
        ],
    ];
    
  • 目录与权限:确保运行用户对runtime/log可写
    • 建议:项目目录属主为部署用户(如 www-data),权限 755;runtime 与子目录 775/777(仅限内网或容器环境)
    • 命令示例:
      sudo chown -R www-data:www-data /var/www/your-app
      sudo chmod -R 755 /var/www/your-app
      sudo chmod -R 775 /var/www/your-app/runtime
      
  • 默认路径与结构:日志默认写入runtime/log,并按日期子目录组织,便于检索与分割。

二 写入与级别

  • 遵循 PSR-3 规范;非实时日志会在请求结束时统一写入,避免在写入后使用 exit 导致日志未落盘。
  • 常用 API:
    • Log::record(‘msg’, ‘level’):写入内存,请求结束统一落盘
    • Log::write(‘msg’, ‘level’):实时写入
    • Log::close():关闭当前请求日志写入
  • 级别(从低到高):debug、info、notice、warning、error、critical、alert、emergency;额外提供 sql(仅当数据库调试开启时记录)。
  • 快速记录:
    use think\facade\Log;
    
    Log::info('用户登录', ['uid' => 1001]);
    Log::error('支付失败: {reason}', ['reason' => '余额不足']);
    Log::write('紧急告警:服务不可用', 'alert');
    
  • SQL 日志:在数据库配置将 trigger_sql 设为 true(或开启 APP_DEBUG),即可在日志中看到 SQL 语句及耗时。

三 切分归档与清理

  • 内置轮转与保留:通过 file_sizemax_files 控制单文件大小与保留数量,超出自动清理,适合日常按大小滚动。
  • 按天归档与压缩(可选方案):
    • 生成命令(示例放在 app/command/LogArchive.php),注册命令后通过 cron 每日执行:
      # 0 1 * * * cd /var/www/your-app && php think log:archive
      
    • 归档脚本要点:扫描日志目录、按月份归档、使用 gz 压缩、归档后删除原文件,便于长期存储与节省空间。
  • 定时清理(可选):部分版本/方案支持在配置中设置 clear_time(单位天)定期清理日志,适合简单场景。

四 线上排查与运维命令

  • 实时查看最新日志:
    tail -f runtime/log/2025*/01.log
    tail -f runtime/log/2025*/error.log
    
  • 按级别快速过滤:
    grep -E '\[error\]|\[critical\]' runtime/log/2025*/01.log
    
  • 按时间窗口检索(例如近 1 小时):
    find runtime/log -name "*.log" -mmin -60 -exec grep -H '' {} \;
    
  • 权限与磁盘告警:
    # 查看日志目录占用
    du -sh runtime/log
    # 查看磁盘使用
    df -h
    # 设置告警阈值(结合监控/告警系统)
    
  • 安全建议:生产环境关闭 APP_DEBUG;避免记录敏感信息(如密码、密钥);对归档与清理任务加锁,防止并发冲突。

0