温馨提示×

thinkphp在ubuntu中的日志如何查看与管理

小樊
31
2025-12-12 16:44:04
栏目: 编程语言

ThinkPHP 在 Ubuntu 的日志查看与管理

一 日志位置与目录结构

  • 默认情况下,应用日志位于项目的 runtime/log/ 目录;按日期(常见为年-月)分文件,例如 runtime/log/2025-12/ 下的 12.log。部分版本或配置还会生成 runtime/sql/ 目录用于记录 SQL 执行日志。若项目自定义了运行时目录,日志路径会随之变化。常用的目录常量包括:RUNTIME_PATH(运行时目录,默认 ROOT_PATH.‘runtime/’)、LOG_PATH(日志目录,默认 RUNTIME_PATH.‘log/’)。示例路径:/var/www/your-app/runtime/log/2025-12/12.log。这些路径与常量便于你快速定位日志位置。

二 快速查看与检索

  • 实时查看当天日志(进入项目根目录后):tail -f runtime/log/$(date +%Y-%m)/$(date +%d).log
  • 查看本月日志:tail -f runtime/log/$(date +%Y-%m)/*.log
  • 按关键字过滤(如 error):grep -n --color=auto 'error' runtime/log/2025-12/*.log
  • 分页查看大文件:less runtime/log/2025-12/12.log(支持 /关键词 搜索,按 q 退出)
  • 查看文件末尾 N 行:tail -n 200 runtime/log/2025-12/12.log
  • 结合系统日志定位 Web/PHP 层错误(如 FPM 或 Apache):sudo tail -f /var/log/php*-fpm.logsudo tail -f /var/log/apache2/error.log;系统级实时日志可用 sudo journalctl -f。以上命令覆盖日常排查的高频场景。

三 日志级别与数据库 SQL 日志

  • 调整应用日志级别(仅记录错误):在配置中设置
    'log' => [
        'type'  => 'File',
        'path'  => '../runtime/log/',
        'level' => ['error'],
    ]
    
    常用级别包含 debug、info、notice、error,生产环境建议仅保留必要级别以减少磁盘占用与信息泄露风险。
  • 输出 SQL 日志到文件:在日志配置中开启 SQL 级别
    'log' => [
        'type'  => 'File',
        'path'  => LOG_PATH,
        'level' => ['sql'],
    ]
    
    开启后,SQL 执行信息会写入 runtime/log/(部分版本在 runtime/sql/)。
  • 在代码中获取 SQL(调试用):
    use think\Db;
    echo Db::getLastSql();
    $logs = Db::getQueryLog();
    print_r($logs);
    
    注意仅在调试环境使用,避免在生产环境输出敏感信息。

四 日志轮转与清理

  • 手动清理:定期归档或删除 runtime/log/ 下历史月份目录(如 2024-*.log),或压缩备份后再清理,避免占用过多磁盘空间。
  • 自动清理(按天):部分版本支持在日志配置中设置自动清理时间,例如
    'log' => [
        'type'      => 'file',
        'path'      => LOG_PATH,
        'clear_time' => 1, // 按天清理
    ]
    
    若你的版本无此配置项,可结合系统级 logrotate 或计划任务实现按天/按大小轮转与清理(示例:logrotate -f /etc/logrotate.conf)。
  • 权限与归属:日志文件通常由 PHP-FPM 进程用户创建(如 www-datanginx)。如出现无法写入,检查目录属主与权限,确保 PHP-FPM 运行用户对 runtime/ 及其子目录具备写权限。

0