ubuntu

ubuntu中thinkphp日志如何管理

小樊
46
2025-10-10 04:18:42
栏目: 编程语言

Ubuntu环境下ThinkPHP日志管理指南

一、日志配置(应用层设置)

ThinkPHP的日志配置主要在application/config.php(或.env环境变量)中完成,关键参数包括:

'log' => [
    'type' => 'file',
    'path' => runtime_path('logs'), // 确保目录存在且有写入权限
    'level' => ['ERROR', 'FATAL'],  // 生产环境仅记录错误及以上级别
    'expire' => 30,                 // 日志保留30天
],

二、日志查看方法

  1. 直接查看文件
    日志文件默认存储在runtime/log/目录下,按日期分文件(如20251010.log)。可通过catlesstail命令查看:
    tail -f /path/to/project/runtime/log/20251010.log  # 实时查看最新日志
    less /path/to/project/runtime/log/20251009.log    # 分页查看历史日志
    
  2. 使用ThinkPHP命令行工具
    运行php think log命令可快速查看所有日志文件的内容,支持按级别过滤(如php think log --level=error仅查看错误日志)。

三、日志清理策略

1. 手动清理

直接删除runtime/log/runtime/sql/(SQL日志,默认开启)目录下的文件:

rm -rf /path/to/project/runtime/log/*  # 清理所有日志文件
rm -rf /path/to/project/runtime/sql/*  # 清理SQL日志

注意:清理前需停止Web服务(如Apache/Nginx),避免文件占用导致删除失败。

2. 自动清理(推荐)

四、生产环境最佳实践

  1. 日志权限控制
    确保runtime/目录权限正确,避免未授权访问。在入口文件(public/index.php)中添加:
    umask(0027); // 设置目录权限为750(所有者可读写执行,组用户可读执行,其他用户无权限)
    
    或通过chmod命令设置:
    chmod -R 750 /path/to/project/runtime/
    chown -R www-data:www-data /path/to/project/runtime/  # 假设Web用户为www-data
    
  2. 日志分割与压缩
    使用logrotate工具对日志进行分割和压缩,减少磁盘占用。创建/etc/logrotate.d/thinkphp文件,内容如下:
    /path/to/project/runtime/log/*.log {
        daily                   # 每天分割
        rotate 30               # 保留30份
        missingok               # 文件不存在时不报错
        notifempty              # 文件为空时不分割
        compress                # 压缩旧日志(gzip)
        delaycompress           # 延迟压缩(避免当天日志被压缩)
        sharedscripts           # 所有日志处理完成后执行脚本
        postrotate
            /usr/bin/systemctl reload php-fpm > /dev/null  # 重启PHP-FPM(确保框架重新打开日志文件)
        endscript
    }
    
    启用logrotate
    systemctl enable logrotate
    systemctl start logrotate
    
  3. 敏感信息过滤
    避免在日志中记录敏感信息(如密码、手机号),可通过ThinkPHP的日志过滤器实现:
    // 在日志记录前过滤敏感字段
    $message = str_replace(['password' => '******', 'phone' => '******'], $message);
    Log::error($message);
    
  4. 日志监控报警
    结合ELK(Elasticsearch+Logstash+Kibana)或Prometheus+Grafana等工具,对日志进行集中存储、分析和报警(如每小时错误日志超过50条时触发邮件报警)。
  5. 高并发场景优化
    在支付回调等高频接口中,临时关闭日志以提升性能:
    public function paymentNotify()
    {
        Log::close(); // 关闭日志
        // 业务逻辑处理...
        Log::init();  // 恢复日志
    }
    

通过以上步骤,可实现Ubuntu环境下ThinkPHP日志的有效管理,确保日志的安全性、可用性和系统性能。

0
看了该问题的人还看了