@easyweb/logging

中文文档
1.0.2发布于 2026/09/18MITTypeScriptESM + CJS零依赖近 30 天下载 3419

为 Easyweb 微服务共享结构化日志: 一个皮诺配置, 在 Async LocalStorage 上请求扫描上下文, 一个 HTTP 访问日志, 以及在其日志出舱前编辑每个服务需要

中文使用文档
文档目录6 节
  1. 为什么它存在
  2. 混合剂
  3. 使用量
  4. 访问日志
  5. 编辑
  6. 故意不编辑的

@easyweb/博客

每个 Easyweb 服务都有一个皮诺配置, 请求范围上下文 不需要用手进行线程、 HTTP 访问日志和编辑 a 木头在离开舱前需要.

为什么它存在

src/lib/logger.ts 被复制成21种服务 它已经漂入两个 变体; domain 财务报告和审定财务报表 moderation 两者都默认服务名称为 "billing-service"和七支队伍 缺少警卫停止 皮诺 -普雷蒂的工人线 使杰斯特出口1 在绿色报告.

更大的问题是相互关系. getLogger(req) 将孩子送还 requestId 并不得不通过 以明确 log 参数。 大约 100个呼叫站点做到了这一点;其他的~1,300通过模块级根登录 记录器和没有请求的id .

混合剂

createServiceLogger 安装一个皮诺 mixin 读取一个 AsyncLocalStorage 存储。 每个现有的呼叫站点都会在不编辑的情况下获得环境字段:

// unchanged call site
log.info({ projectId }, "Project created");

// what it now emits
{ "service": "project-service", "requestId": "…", "userId": "…", "projectId": "…" }

pino 将调用站点所通过对象下的混音合并,所以明确 字段总是胜过环境.

混合手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平手平. 皮诺默认合并为 Object.assign(mixinObject, mergeObject)和1.0.1 返回现场商店 - 所以每个呼叫的字段 都被写进请求的背景 并出现在 该请求的后行 err 包含。 也跳过任何密钥 日志已绑定, 这就是为什么 getLogger(req) 线条或订阅者 child({ requestId, queue }) 现在带行 requestId 一次,不是两次.

使用量

// src/lib/logger.ts
import { createServiceLogger } from "@easyweb/logging";
import config from "../config";

const { logger, getLogger } = createServiceLogger({
  serviceName: config.serviceName,
  logLevel: config.logLevel,
});

export { getLogger };
export default logger;
// src/app.ts — the access log needs the scope, so it goes after requestContext
app.use(requestContext);
app.use(createHttpLogger(logger));

在请求之外开设一个范围——一个BullMQ工作,一个经纪人处理者:

await runWithContext({ jobId: job.id, job: job.data.type }, () => handle(job));

添加到已运行的瞄准镜中.. authenticate 一旦发生这种情况 已校验符号 :

bindContext({ userId: decoded.sub });

访问日志

每完成请求一行, msg: "request"。 。 。 .

route 是路径 模式 (单位:千美元)/billing/me/invoices/:invoiceId),以及该 是一种合同而不是一种便利:RED指标是记录规则 上面,所以每个值 将使系列无限制. path 携带 真正的路径旁边,从 req.originalUrl ——快取挂载前缀 关 req.path 在路由器发送时, 读取到最后调用 命名一个不存在的路由.

查询字符串从未被登录 . ?token=… 在核查路线是直播 证书.

/health, (中文(简体) ), /livez, (中文(简体) ), /readyz 财务报告和审定财务报表 /metrics 被跳过 否则将使准备状态探测器成为集群中最大的对流.

编辑

两种机制,涵盖不同的形状:

  • REDACT_PATHS ——皮诺的固定路径修饰,为我们自己的有效载荷. 密码、令牌、饼干和认证信头,在最高一级和一级 下来.
  • scrubResponseData - 递归式、深度和尺寸的走过 err.response.data对于有效载荷,我们无法控制。 仙地特 花纹 复发, Meta、Apify、Cloudflare和Gitea都把个人数据放入错误的正文中 407 (韩语) logger.error({ err }) 呼叫站点将其逐字输入日志 未被盖.

err.response.data 上限为 2 KB 之后 洗涤,而不是它 - 切换首先会保持任何合适的, 对于失败的收费是 支付者街区.

故意不编辑的

电子邮件地址。 认证服务记录 三行一行——注册,a 以及Google注册 审计线索 : userId 单凭自己无法回答"他们注册了哪个地址" 还有... ... 接触是真实的,并以保留原木为限。 见 docs/platform/ADR-0001。 。 。 .

版本与发布记录

@easyweb/logging 共发布 3 个版本,首次发布于 2026/08/27;过去 12 个月发布了 3 个版本。

版本发布日期距今
1.0.2latest2026/09/181 个月前
1.0.12026/08/272 个月前
1.0.02026/08/272 个月前

关于 @easyweb/logging 的常见问题

@easyweb/logging 是什么?

为 Easyweb 微服务共享结构化日志: 一个皮诺配置, 在 Async LocalStorage 上请求扫描上下文, 一个 HTTP 访问日志, 以及在其日志出舱前编辑每个服务需要

如何安装 @easyweb/logging?

在项目目录运行 npm install @easyweb/logging,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:pino(^10.0.0)、express(^5.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@easyweb/logging 支持 TypeScript 吗?

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

@easyweb/logging 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@easyweb/logging 需要什么版本的 Node.js?

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

@easyweb/logging 可以商用吗?

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

@easyweb/logging 的下载量有多少?

根据 npm 官方下载统计,@easyweb/logging 在 2026/10/13 – 2026/11/11 这 30 天内被下载 3,419 次,日均约 114 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@easyweb/logging 还在维护吗?

最新版本 1.0.2 发布于 2026/09/18(1 个月前);至今共发布 3 个版本,其中过去 12 个月发布了 3 个;首次发布于 2026/08/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。