实现 think/queue 日志分离

当我们使用think/queue包含了比较多的不同队列,日志会写到runtime/log目录下,合并写入的,不好排查问题,我们遇到一个比较严重的就是用了不同用户来执行,权限冲突了,导致部分队列执行不了.

为了解决以上问题,本来希望通过Log::init设置不同日志路径的,但是本地测试没生效,于是用了一下方案:

  1. event中AppInit添加QueueLog
php 复制代码
<?php
// 事件定义文件

use app\common\event\QueueLog;

return [
    'bind'      => [
    ],

    'listen'    => [
        'AppInit'  => [QueueLog::class],
        'HttpRun'  => [],
        'HttpEnd'  => [],
        'LogLevel' => [],
        'LogWrite' => [],
    ],

    'subscribe' => [
    ],
];
  1. 创建QueueLog事件
php 复制代码
<?php
namespace app\common\event;

use think\App;
use think\facade\Request;

class QueueLog
{
    public function handle(App $app): bool
    {
        if (!Request::isCli()) {
            return true;
        }
        $args = (array) $_SERVER['argv'];
        foreach ($args as $arg) {
            if (str_starts_with($arg, '--queue=')) {
                $queueName = substr($arg, 8);
                $app->setRuntimePath($app->getRuntimePath() . '/' . 'queue' . '-' . $queueName . '/');
                break;
            }
        }
        return true;
    }
}

这样的话,不同队列的日志就写到不同的路径下了

相关推荐
catchadmin8 小时前
PHP 依赖管理器 Composer 2.9 发布
开发语言·php·composer
悠悠~飘8 小时前
PHP基础-字符串(第16天)
php
一念一花一世界10 小时前
Arbess从初级到进阶(7) - 使用Arbess+GitLab实现PHP项目自动化部署
ci/cd·gitlab·php·arbess
星光一影11 小时前
废品回收系统小程序源码
mysql·php·html5
曦樂~12 小时前
【Docker】网络
docker·容器·php
nvvas15 小时前
PHP安装ZSTD压缩库扩展
php
stand_forever18 小时前
PHP客户端调用由Go服务端GRPC接口
rpc·golang·php
TravisBytes1 天前
一次 Qt 网络程序诡异崩溃排查:从 Breakpad 堆栈到 lambda 捕获悬空引用
网络·qt·php
Alex艾力的IT数字空间2 天前
完整事务性能瓶颈分析案例:支付系统事务雪崩优化
开发语言·数据结构·数据库·分布式·算法·中间件·php
q***76662 天前
网络安全防护指南:筑牢网络安全防线(510)
安全·web安全·php