Skip to content

简介

全局异常处理模块。注册 uncaughtExceptionunhandledRejection 监听器以捕获未处理异常和 Promise 拒绝,记录日志,并根据配置决定是否退出进程。在框架启动时由 boot.tsinit() 最先调用,确保后续流程中的异常能被捕获。

在主进程和 ChildJob 子进程中均启用。

导入

CJS 和 ESM:

javascript
// ESM
import { loadException, uncaughtExceptionMonitorHandler } from 'ee-core/exception';
// CJS
const { loadException, uncaughtExceptionMonitorHandler } = require('ee-core/exception');

API

loadException()

说明:注册全局 uncaughtExceptionunhandledRejection 处理器。应在应用启动最早期调用。框架在 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,确保异常永远不会被静默吞没。