讲师中心 微信公众号
AI工具推荐 视频效率加速

Workerman自定义错误处理怎么捕获未捕获的异常

陌萱姑娘_3474

陌萱姑娘_3474

发布时间:2026-08-07 16:04:02

|

825人浏览过

|

来源于php中文网

原创

Workerman自定义错误处理需在start.php顶部、Worker::runAll()前设置set_exception_handler捕获未兜住异常,并用set_error_handler将PHP错误转为ErrorException;Webman中通过config/exception.php配置CustomHandler类接管异常;主进程也需设异常处理器,且回调中避免触发新异常并记录debug_backtrace上下文。

workerman自定义错误处理怎么捕获未捕获的异常

Workerman自定义错误处理需要捕获未被业务代码try-catch兜住的异常,否则这些异常会直接终止Worker进程并暴露原始堆栈给客户端。

设置全局异常处理器

在Workerman启动文件(如start.php)最顶部引入后、Worker::runAll()之前,调用PHP原生set_exception_handler函数:

set_exception_handler(function (Throwable $e) {
    error_log('[Uncaught Exception] ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
    // 此处可写入日志文件、上报Sentry或发送告警
});

这一步必须放在Worker实例创建前,否则Worker内部初始化时抛出的异常无法被捕获。

统一接管所有错误类型

PHP错误(如E_WARNING、E_NOTICE)默认不会触发set_exception_handler,需额外用set_error_handler将其转为ErrorException:

set_error_handler(function ($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) {
        return;
    }
    throw new ErrorException($message, 0, $severity, $file, $line);
});

注意:该转换只对非致命错误生效;E_PARSE、E_COMPILE_ERROR等编译期错误仍会直接中断脚本,无法捕获。

在Webman中替换默认异常处理器

Webman框架已封装异常处理流程,直接修改config/exception.php即可:

方法一:继承框架Handler并重写render方法
创建app/exception/CustomHandler.php:
class CustomHandler extends \support\exception\Handler {
    public function render($request, Throwable $e): Response {
        if ($e instanceof \Workerman\Connection\ConnectionException) {
            return response()->json(['code' => 503, 'msg' => '服务暂时不可用'], 503);
        }
        return parent::render($request, $e);
    }
}

方法二:完全自定义处理器类
在config/exception.php中注册:
return [
    '' => app\exception\CustomHandler::class,
];

【必须确保CustomHandler类已正确声明命名空间并能被自动加载】

捕获Worker进程级崩溃异常

第一步:确认主进程是否启用异常捕获
在start.php中检查是否已设置:
if (Worker::$pid === Worker::$masterPid) {
    set_exception_handler(...); // 主进程也要设,否则master崩溃无日志
}

第二步:避免在异常处理器中触发新异常
禁止在set_exception_handler回调里调用可能失败的函数(如file_put_contents未检查磁盘空间、curl请求超时),否则会导致进程静默退出。

第三步:记录原始上下文信息
在异常处理器内添加:
$context = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 10);
error_log('Backtrace: ' . json_encode($context));

这能保留异常发生前最近10层调用链,比单靠$e->getTraceAsString()更利于定位异步场景下的问题。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

909

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2480

2023.10.25

Workerman安装配置教程
Workerman安装配置教程

Workerman安装配置教程专题提供Workerman安装配置、WebSocket开发、TCP通信、异步编程、高并发服务搭建与PHP实时通信开发教程。

166

2026.05.20

Workerman实时通信与长连接开发教程
Workerman实时通信与长连接开发教程

WWorkerman实时通信与长连接开发教程聚合实时通信、聊天室、长连接、消息推送、AI流式输出等Workerman高并发开发内容。

182

2026.05.20

Workerman异步通信与TCP服务器开发
Workerman异步通信与TCP服务器开发

Workerman异步通信与TCP服务器开发专题整理Workerman异步通信、TCP服务、HTTP服务、WebSocket开发与高并发PHP服务器教程。

187

2026.05.20

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

200

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

120

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

100

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Webman中文手册
Webman中文手册

共0课时 | 0人学习

Workerman官方手册
Workerman官方手册

共0课时 | 0人学习

ThinkPHP5.1完全开发手册
ThinkPHP5.1完全开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn