webman 使用swoole协程 log创建目录报错

lsmir2

问题描述

报错日志

UnexpectedValueException: There is no existing directory at "/app/runtime/logs/admin" and it could not be created: Invalid argument in /app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:251
Stack trace:
#0 /app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php(141): Monolog\Handler\StreamHandler->createDir('/app/runtime/lo...')
#1 /app/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php(126): Monolog\Handler\StreamHandler->write(Array)
#2 /app/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(48): Monolog\Handler\RotatingFileHandler->write(Array)
#3 /app/vendor/monolog/monolog/src/Monolog/Logger.php(400): Monolog\Handler\AbstractProcessingHandler->handle(Array)
#4 /app/vendor/monolog/monolog/src/Monolog/Logger.php(612): Monolog\Logger->addRecord(200, '\xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x98 supAd...', Array)
#5 /app/app/admin/controller/OrdersController.php(201): Monolog\Logger->info('\xE7\xAE\xA1\xE7\x90\x86\xE5\x91\x98 supAd...', Array)
#6 /app/vendor/workerman/webman-framework/src/App.php(336): app\admin\controller\OrdersController->Notify(Object(support\Request))
#7 /app/vendor/workerman/webman-framework/src/App.php(359): Webman\App::Webman\{closure}(Object(support\Request))
#8 /app/app/admin/middleware/Auth.php(34): Webman\App::Webman\{closure}(Object(support\Request))
#9 /app/vendor/workerman/webman-framework/src/App.php(352): app\admin\middleware\Auth->process(Object(support\Request), Object(Closure))
#10 /app/vendor/webman/log/src/Middleware.php(97): Webman\App::Webman\{closure}(Object(support\Request))
#11 /app/vendor/workerman/webman-framework/src/App.php(352): Webman\Log\Middleware->process(Object(support\Request), Object(Closure))
#12 /app/vendor/workerman/webman-framework/src/App.php(663): Webman\App::Webman\{closure}(Object(support\Request))
#13 /app/vendor/workerman/webman-framework/src/App.php(158): Webman\App::findRoute(Object(Workerman\Connection\TcpConnection), '/admin/orders/N...', 'POST/admin/orde...', Object(support\Request), 200)
#14 /app/vendor/workerman/workerman/src/Connection/TcpConnection.php(753): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
#15 /app/vendor/workerman/workerman/src/Events/Swoole.php(288): Workerman\Connection\TcpConnection->baseRead(Resource id #371)
#16 [internal function]: Workerman\Events\Swoole->Workerman\Events\{closure}()
#17 {main}

使用 Workerman\Events\Fiber::class 后目录正常创建

程序代码或配置

webman/config/process.php

    'eventLoop' => Workerman\Events\Swoole::class,

操作系统环境及workerman/webman等具体版本

Workerman/5.1.1
PHP/8.3.21 (Jit off)
Linux/5.10.134-18.al8.x86_64
docker
258 4 0
4个回答

walkor 打赏

可能是 swoole和 Monolog有兼容问题,这个这边没办法解决

  • 暂无评论
轻云蔽月

看起来像是io_uring引起的问题,编译的时候有开启io_uring特性吗?

  • lsmir2 14天前

    docker 的swoole 扩展是通过https://github.com/mlocati/docker-php-extension-installer 进行安装的.
    docker 编排 使用了
    security_opt:

  • 轻云蔽月 13天前

    php --ri swoole看看

  • lsmir2 11天前
     docker exec -it webman-app php --ri swoole
    
    swoole
    
    Swoole => enabled
    Author => Swoole Team <team@swoole.com>
    Version => 6.0.2
    Built => May 15 2025 22:08:22
    coroutine => enabled with boost asm context
    epoll => enabled
    eventfd => enabled
    signalfd => enabled
    cpu_affinity => enabled
    spinlock => enabled
    rwlock => enabled
    openssl => OpenSSL 3.3.3 11 Feb 2025
    dtls => enabled
    http2 => enabled
    json => enabled
    curl-native => enabled
    curl-version => 8.12.1
    c-ares => 1.33.1
    zlib => 1.3.1
    brotli => E16781312/D16781312
    zstd => 1.5.6
    mutex_timedlock => enabled
    pthread_barrier => enabled
    futex => enabled
    mysqlnd => enabled
    coroutine_pgsql => enabled
    coroutine_sqlite => enabled
    io_uring => enabled
    
    Directive => Local Value => Master Value
    swoole.enable_library => On => On
    swoole.enable_fiber_mock => Off => Off
    swoole.enable_preemptive_scheduler => Off => Off
    swoole.display_errors => On => On
    swoole.use_shortname => On => On
    swoole.unixsock_buffer_size => 8388608 => 8388608
  • 轻云蔽月 11天前

    试试编译的时候不设置--enable-iouring吧,这个操作系统估计不支持io_uring,看看内核版本先

  • lsmir2 10天前

    操作系统支持 io_uring

    [root@zzz ~]# zcat /proc/config.gz | grep CONFIG_IO_URING
    CONFIG_IO_URING=y
    [root@zzz ~]# uname -r
    5.10.134-18.al8.x86_64
轻云蔽月

本地复现没问题,要检查一下服务器linux的内核版本和容器内核版本看看

  • 暂无评论
轻云蔽月

AliOS是为嵌入式设备和物联网场景设计的轻量级操作系统,可能有些关于io_uring的功能被剔除掉了

  • 暂无评论
🔝