实现 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;
    }
}

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

相关推荐
优橙教育1 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
郭萌6965 小时前
多商户平台的优惠券,真正的设计对象是「适用范围」而不是券模板
php
额额额对了5 小时前
嵌入式 Linux 启动程序文件
开发语言·嵌入式硬件·php
v:ychya20186 小时前
独立站外贸建站公司怎么选?建站就要建营销型网站
前端·php
梅菲塔亚7 小时前
华为云从入门到实战
开发语言·华为云·php
要吃这碗饭7 小时前
AI 智能体如何通过 auth.md 注册 Bright Data 账号
数据库·人工智能·php
霸道流氓气质7 小时前
幂等性与 Upsert:防止重复操作产生副作用的技术
开发语言·php
qq_543447828 小时前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
ZHOUPUYU9 小时前
PHP 9.0 前瞻:下一代 PHP 会带来哪些新功能?
android·开发语言·php
ZHOUPUYU10 小时前
PHP 8.2 的核心高级特性,包括只读类、类型系统增强
android·性能优化·php