LogTape 0.12.0 发布说明

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

LogTape 是一个零依赖的 JavaScript 和 TypeScript 日志库,提供简单而灵活的日志系统。它支持多种 JavaScript 运行时环境(Deno、Node.js、Bun、浏览器和边缘函数),具有层次化分类、结构化日志记录功能,并为应用程序和库提供无缝集成。

0.12.0 版本新特性

Trace 日志级别

LogTape 现在包含 trace 严重性级别,它在详细程度层次结构中位于 debug 之下。这一新增功能提供了对日志输出更精细的控制,特别适用于在开发和调试过程中跟踪详细的执行流程。

  • LogLevel 联合类型中添加了 "trace"
  • 添加了 Logger.trace() 方法用于记录 trace 级别的消息
  • 完整的严重性层次结构现在是:trace < debug < info < warning < error < fatal

增强的文件接收器性能

文件接收器现在支持可配置的缓冲,显著提高了高容量日志场景下的写入性能。

  • 添加了 bufferSize 选项(默认值:8192 字符)来控制写入缓冲行为
  • 添加了 flushInterval 选项(默认值:5000 毫秒)用于基于时间的自动缓冲刷新
  • bufferSize 设置为 0 可实现无缓冲的即时写入
  • flushInterval 设置为 0 可禁用基于时间的刷新
  • 当接收器被销毁时,缓冲区内容会自动刷新

这些选项适用于 getFileSink()getRotatingFileSink() 函数。

Syslog 支持

新的 @logtape/syslog 包支持使用 RFC 5424 格式向 syslog 服务器发送日志消息。

  • 支持 UDP 和 TCP 协议
  • 支持所有标准 RFC 5424 设施(kernusermaildaemonlocal07 等)
  • 基于日志级别自动计算优先级
  • 支持日志记录属性的结构化数据
  • 与 Deno、Node.js 和 Bun 的跨运行时兼容性
  • 可配置的连接超时、自定义主机名和应用程序名称

Logger 方法别名

添加了 Logger.warning() 作为 Logger.warn() 的别名,以确保与 LogLevel 类型定义的一致性。这一变更解决了命名不匹配的问题,即 LogLevel 联合类型使用 "warning" 而 logger 方法命名为 warn(),使元编程和动态方法调用更加直观。

统一包发布

从 0.12.0 版本开始,所有 LogTape 包(包括 @logtape/otel@logtape/sentry@logtape/syslog)共享相同的版本号并一起发布。这确保了包之间的兼容性,并简化了用户的版本管理。

改进的构建基础设施

LogTape 已从 dnt 迁移到 tsdown 进行 npm 包打包。tsdown 是一个基于 Rolldown 构建的面向库的打包工具,Rolldown 是一个基于 Rust 的打包工具,为下一代 Vite 提供动力。与通用打包工具不同,tsdown 专门针对构建 TypeScript 和 JavaScript 库进行了优化,配置最小化。这一变更带来了几个好处:

  • 消除了 Webpack、Vite 和其他构建工具中的打包警告
  • 提高了与现代 JavaScript 工具链的兼容性
  • 更好的 tree-shaking 支持
  • 更清晰的包输出
  • 通过基于 Rust 的性能优化实现更快的构建时间

迁移指南

更新到 Trace 级别

如果您的代码依赖于 debug 作为最低严重性级别,您可能需要更新日志级别配置:

// 之前
{ lowestLevel: "debug" }  // 这是最详细的设置

// 之后
{ lowestLevel: "trace" }  // 现在包含 trace 消息

利用缓冲区配置

要在高吞吐量场景中优化文件接收器性能:

getFileSink("app.log", {
  bufferSize: 16384,      // 更大的缓冲区以提高性能
  flushInterval: 10_000    // 每 10 秒刷新一次
})

安装

LogTape 0.12.0 可在 JSR 和 npm 上获取:

deno add jsr:@logtape/logtape  # Deno
npm  add     @logtape/logtape  # npm
pnpm add     @logtape/logtape  # pnpm
yarn add     @logtape/logtape  # yarn
bun  add     @logtape/logtape  # Bun

对于 syslog 接收器:

deno add jsr:@logtape/syslog  # Deno
npm  add     @logtape/syslog  # npm
pnpm add     @logtape/syslog  # pnpm
yarn add     @logtape/syslog  # yarn
bun  add     @logtape/syslog  # Bun

致谢

我们感谢所有帮助实现这个版本的贡献者,包括那些报告问题、提交拉取请求和提供反馈的人。

有关完整的变更列表,请参阅更新日志

9

No comments

If you have a fediverse account, you can comment on this article from your own instance. Search https://hackers.pub/ap/articles/01976f50-c9ce-7c2a-bbc2-7dcf614c276b on your instance and reply to it.