温馨提示×

centos服务器上thinkphp日志管理

小樊
33
2025-11-25 19:09:03
栏目: 云计算

CentOS 服务器上 ThinkPHP 日志管理

一 基础配置与存放路径

  • 默认日志目录为项目根目录下的 runtime/log/,按天生成文件(如:YYYY-mm-dd.log)。可在配置文件 config/log.php 中自定义路径与行为,例如:
return [
    'default' => 'file',
    'channels' => [
        'file' => [
            'type'      => 'file',
            'path'      => '',            // 默认 runtime/log
            'level'     => ['error','info'], // 只记录 error、info
            'max_files' => 30,           // 最多保留 30 个文件
            'json'      => false,
        ],
    ],
];
  • 日志级别从低到高:debug → info → notice → warning → error → critical → alert → emergency。设置 level 可过滤低于该级别的日志(如仅记录 error 及以上)。
  • 手动记录示例:
use think\facade\Log;
Log::info('用户登录', ['user_id' => 1]);
Log::error('支付失败', ['order_id' => 1001, 'reason' => '余额不足']);
  • 实时查看日志:tail -f runtime/log/2025-07-07.log。高频日志可开启批量写入:Log::batch(true)

二 写入策略与保留策略

  • 保留策略优先使用框架的文件数量控制:设置 max_files(如 30)自动清理旧文件,避免磁盘占满。
  • 若需按大小或日期自定义切割归档,可在项目中实现归档命令(示例为 LogArchive),并通过 cron 定时执行:
# 每天 01:00 归档
0 1 * * * cd /path/to/project && php think log:archive
  • 临时关闭日志(不建议生产使用):将通道类型设为 test,如:'type' => 'test'
  • 命令行运行(CLI)时,为避免内存溢出,框架会在 5.0.4+ 自动定时把内存日志写入磁盘。

三 服务器侧日志轮转与清理

  • 推荐用 logrotate 管理 ThinkPHP 日志(长期、稳定、可自动压缩与清理)。示例配置 /etc/logrotate.dphp
/path/to/project/runtime/log/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0755 www-data www-data
    copytruncate
}

说明:

  • daily/rotate 30:按天轮转,保留 30 份;
  • compress/delaycompress:压缩旧日志,延迟到下一次轮转再压缩;
  • missingok/notifempty:缺失不报错、空文件不轮转;
  • create:轮转后重建日志并设置权限与属主(示例为 www-data);
  • copytruncate:复制后截断原文件,避免部分进程持有文件句柄导致写入失败。
  • 手动触发测试:logrotate -vf /etc/logrotate.dphp
  • 如需清理系统级日志(如 journald):journalctl --vacuum-time=7djournalctl --vacuum-size=100M

四 常见问题与排查

  • 日志不写入:检查 runtime/log 目录及上级目录对 Web/CLI 运行用户是否可写(如 chown -R www-data:www-data runtimechmod -R 0755 runtime)。
  • 日志过大或过多:优先调小 max_files,或按业务拆分通道(如将 error 单独写入高保留通道);必要时启用按大小切割与归档脚本。
  • 敏感信息:避免记录 密码、密钥、银行卡号 等敏感数据;上线前审计日志格式与内容。
  • 命令行任务日志:在 CLI 模式下,确保进程能正常写入(目录可写、磁盘未满),并关注 5.0.4+ 的定时刷新机制。

0