# @electron-forge/multi-logger 中文文档

规范地址：https://npmcn.com/package/%40electron-forge/multi-logger/

版本：8\.0\.1
npm 元数据更新时间：2026-09-29T20:35:39.136Z
中文译文更新时间：2026-11-13T11:47:49.591Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40electron-forge/multi-logger
原文对照：https://npmcn.com/package/%40electron-forge/multi-logger/?lang=original
项目主页：https://github.com/electron/forge#readme
源码仓库：https://github.com/electron/forge

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：136 kB，43 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>= 22\.13\.0
- 运行依赖：5 个
- 首次发布：2026-09-28T22:31:07.865Z
- 最新版本发布：2026-09-29T20:35:38.770Z
- 近 30 天下载量：1098895（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：3（近 12 个月 3 个）

## 中文简介

在终端中以标签方式显示多个日志流

## 安装

```sh
npm install @electron-forge/multi-logger
```

也可以使用：`pnpm add @electron-forge/multi-logger`、`yarn add @electron-forge/multi-logger`、`bun add @electron-forge/multi-logger`

## README

# 多调试器

> 在终端中以标签方式显示多个日志流

本模块收集多个逻辑上分离的日志流 ("tabs") 和 使其进入终端,进程已经进入。 附上时 到交互式终端,它绘制一个全屏制表UI [墨迹](https://github.com/vadimdemedes/ink); 否则( CI, 有管输出) 返回到带有有色标记的仅附加行前缀。 线条可能包含 ANSI的造型,所以任何在终端能制成的东西都可以被接入.

## 使用量

```javascript
import Logger from '@electron-forge/multi-logger';

const logger = new Logger({ title: 'My tool' });

const serverTab = logger.createTab('Server');
const frontEndTab = logger.createTab('Front End');

// Everything logged before start() is buffered and shown once rendering begins.
serverTab.setStatus({ state: 'building' });
serverTab.log('listening on :3000');
serverTab.setStatus({ state: 'success', durationMs: 1200 });

// Pipe a child process's stdout/stderr into a tab of its own.
logger.attachProcess(spawn('node', ['server.js']), 'Server');

await logger.start();

// Later: restore the terminal. Safe to call more than once, and it also runs
// on process exit so a crash never leaves the terminal in the alternate screen.
logger.stop();
```

## API 密码

### `new Logger(options?)`

| 选项 | 说明 |
| --- | --- |
| `stdout` | 顺流而上 默认为 `process.stdout`。 。 。 . |
| `stdin` | 流到读取密钥 。 默认为 `process.stdin`。 。 。 . |
| `interactive` | 是否使用带有标签的 UI 。 默认为 `stdout.isTTY && stdin.isTTY && !process.env.CI`。 。 。 . |
| `forceMode` | `'ink'` 或者说 `'plain'` 绕过检测. |
| `title` | 在标签栏左侧显示文本 . |
| `keys` | 额外的热门, `{ key, label, onPress }`,在页脚上列出. |
| `maxLines` | 每分页保留行(并用于合并视图). 默认为5000. |
| `initialTab` | 首先显示标签的名称,或 `'all'` 用于合并视图。 第一个标签的默认值 . |
| `errorSwitchDebounceMs` | 自动切换到失败的标签之间的最小间隔 。 默认为 15000. |

-   `logger.createTab(name)` 返回 a `Tab`。 。 。 .
-   `logger.getTab(name)` 编号 : `logger.getTabs()`。 。 。 .
-   `logger.attachProcess(child, name = 'App')` 给孩子管子 `stdout` 财务报告和审定财务报表 `stderr` 输入分行的分页,并在分页结束时标出分页. 同名的标签被再用,所以一个重新启动的进程会保留其标签. 当孩子离开时, Stdin 会被放回原始模式,以防孩子死亡 继承了终端,并在出站途中重新设置(节点嵌入器等) 电能做); `logger.reassertRawMode()` 按要求做同样的事情.
-   `logger.start()` 开始渲染 在此之前,一切被缓冲.
-   `logger.stop()` 卸载 UI并恢复终端。 如果UI从不 将缓冲行作为纯文本写入 无所失也.
-   `logger.extendOptions({ keys?, title?, initialTab? })` 添加选项 日志创建方式: extra `keys` (已绑定的密钥已离开) (b) 单独审议) `title` 编号 : `initialTab` 当还没有确定的时候。 它没有影响 一次乌伊 `start()` 已被调用.

### 共享一个数据包

一个进程只能明智地绘制一个 UI, 所以一个主机和运行中的插件 内部应该共享一个日志,而不是各自创建自己的日志:

```javascript
import { ensureSharedLogger } from '@electron-forge/multi-logger';

// The host creates it. The first caller decides how it is set up…
const logger = ensureSharedLogger({ title: 'My tool', initialTab: 'App' });

// …and a plugin, later, just adds a tab to it.
const tab = ensureSharedLogger().createTab('Bundler');
```

-   `ensureSharedLogger(options?)` 返回全进程日志,创建它 在第一个呼叫。 以后的电话 `options` 通过下列方式合并: `extendOptions()`: 额外 `keys` 添加, `title` 编号 : `initialTab` 被带入 惟有尚未确定,其他一切被忽略.
-   `getSharedLogger()` 返回,或 `undefined` 如果没有人创建.
-   `resetSharedLogger()` 忘记它而不阻止它; 意在测试.

案件登记如下: `Symbol.for('@electron-forge/multi-logger')` 打开 `globalThis`,因此,甚至两本这个包在一个 `node_modules` 树 最终分享它.

### `Tab`

-   `tab.log(text)` 附加文本,其中可能包含多行和ANSI颜色.
-   `tab.setStatus({ state, errors?, warnings?, durationMs?, detail? })` 地点 `state` 这是其中之一 `idle`, (中文(简体) ), `building`, (中文(简体) ), `success`, (中文(简体) ), `warning`, (中文(简体) ), `error` 或者说 `exited`。状态显示在标签名称旁边.
-   `tab.clear()` 空出标签的缓冲.

## 交互式用户界面

```text
Electron Forge · webpack  1 Main Process ✔ 1.2s  2 Renderer (web) ⠹  3 Preload (electron-preload) ✖ 2  4 App ●  a All
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
… the active tab's most recent lines, wrapped to the terminal width …
←/→ 1-9 tabs · a all · r restart electron · c clear · f follow · ↑/↓ scroll · q quit
```

| 密钥 | 行动 |
| --- | --- |
| `←` 编号 : `→`, (中文(简体) ), `Tab` 编号 : `Shift+Tab` | 通过标签循环 |
| `1` 改为 `9` | 跳转到标签 |
| `a` | 按到达顺序合并每个标签的视图, 并用标签标记 |
| `↑` 编号 : `↓`, (中文(简体) ), `PgUp` 编号 : `PgDn` | 通过缓冲器回滚( 停止在后面) |
| `Home` 编号 : `End` | 跳到最古老的一行/ 回到尾端 |
| `f` | 跟踪尾巴切换 |
| `c` | 清除当前标签( 或合并视图中的每个标签) |
| `q`, (中文(简体) ), `Ctrl+C` | 恢复终端并重新提升 `SIGINT` |
| 自定义 `keys` | 不论东道主注册什么,例如:. `r` 要重新启动 |

标签栏总是适合终端:当它被紧紧的长度和 数数先去,然后标题, 最后芯片包装到更多的行. 当标签状态变为 `error` 视图最多每一次 `errorSwitchDebounceMs`,因此一系列失败不会与用户对抗.

UI使用终端的可换显示屏,所以无论之前打印过什么 `start()` 退出时仍在回滚中,并打印出一行 每个标签的状态( 加上以出错结束的任何标签的尾部) 出来.

因为墨水将 stdin 输入到原始模式中, 以行为基础的输入如打字 `rs` 在 UI 启动时, 主机进程未看到; 主机应当注册 等同的热键通过 `keys` 换句话说.

## 普通模式

当stdout或stdin不是TTY,或 `CI` 设定, 线条按写 到达 :

```text
[Main Process]   asset index.js 1.2 KiB [emitted] (name: main)
[Main Process]   ✔ compiled in 1.2s
[Renderer (web)] ✖ failed with 1 error in 2.1s
```

## 常见问题

### @electron-forge/multi-logger 是什么？

在终端中以标签方式显示多个日志流

### 如何安装 @electron-forge/multi-logger？

在项目目录运行 npm install @electron-forge/multi-logger，或使用 pnpm add / yarn add / bun add。

### @electron-forge/multi-logger 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @electron-forge/multi-logger 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @electron-forge/multi-logger 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>= 22\.13\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @electron-forge/multi-logger 可以商用吗？

@electron-forge/multi-logger 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @electron-forge/multi-logger 的下载量有多少？

根据 npm 官方下载统计，@electron-forge/multi-logger 在 2026/10/14 – 2026/11/12 这 30 天内被下载 1,098,895 次，日均约 36,630 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @electron-forge/multi-logger 还在维护吗？

最新版本 8\.0\.1 发布于 2026/09/30（1 个月前）；至今共发布 3 个版本，其中过去 12 个月发布了 3 个；首次发布于 2026/09/29。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

