简介
全局异常处理模块。注册 uncaughtException 和 unhandledRejection 监听器以捕获未处理异常和 Promise 拒绝,记录日志,并根据配置决定是否退出进程。在框架启动时由 boot.ts 的 init() 最先调用,确保后续流程中的异常能被捕获。
在主进程和 ChildJob 子进程中均启用。
导入
CJS 和 ESM:
javascript
// ESM
import { loadException, uncaughtExceptionMonitorHandler } from 'ee-core/exception';
// CJS
const { loadException, uncaughtExceptionMonitorHandler } = require('ee-core/exception');API
loadException()
说明:注册全局 uncaughtException 和 unhandledRejection 处理器。应在应用启动最早期调用。框架在 ElectronEgg.init() 中自动调用此函数。 参数:无 返回值:void示例:
javascript
import { loadException } from 'ee-core/exception';
loadException();参见:在 boot.ts 中由 ElectronEgg.init() 自动调用
uncaughtExceptionMonitorHandler()
说明:注册 uncaughtExceptionMonitor 监听器。与 uncaughtException 不同,此处理器在异常被捕获之前触发,可用于异常监控和上报,不影响后续异常处理流程。适用于向外部监控服务发送异常数据。 参数:无 返回值:void示例:
javascript
import { uncaughtExceptionMonitorHandler } from 'ee-core/exception';
// 注册监控用于外部上报(不影响正常异常处理)
uncaughtExceptionMonitorHandler();参见:loadException()
行为细节
异常配置
_exit() 函数检查应用配置的 exception 部分,决定未处理异常后是否退出进程:
| 配置键 | 进程类型 | 默认值 | 说明 |
|---|---|---|---|
mainExit | 主进程 | false | 主进程是否在未处理异常时退出 |
childExit | 子进程(forked) | false | 子进程是否在未处理异常时退出 |
rendererExit | 渲染进程 | false | 渲染进程是否在未处理异常时退出 |
延迟退出
当配置为退出时,进程在 1500ms 延迟后退出,允许日志写入等异步操作在进程终止前完成。
子进程错误可见性
在开发模式下,fork 子进程通过 childMessage.sendErrorToTerminal() 将错误信息发送到终端,使子进程异常在主终端中直接可见。
日志器回退
如果 coreLogger 失败(如子进程中 pino transport 不可用),模块回退到 console.error,确保异常永远不会被静默吞没。
