宣布 LogTape 1.0.0 發布

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
LogTape 是什麼?
LogTape 是一個專為現代 JavaScript 生態系統設計的日誌記錄庫。它以零依賴架構、跨 Node.js、Deno、Bun、瀏覽器和邊緣函數的通用運行時支援,以及以庫為優先的設計理念而脫穎而出,使庫作者能夠添加日誌記錄功能而不對使用者造成任何負擔。當 LogTape 未被配置時,日誌記錄呼叫幾乎不會對效能產生影響,使其成為唯一真正不引人注目的日誌解決方案。
如需全面了解 LogTape 的功能和理念,請參閱我們的介紹指南。
里程碑成就
我們很高興宣布 LogTape 1.0.0 的發布,這標誌著該庫開發的重要里程碑。此版本代表我們對 API 穩定性和長期支援的承諾。1.0.0 版本標誌著 LogTape 的核心 API 現已穩定並可用於生產環境,未來的任何重大變更都將遵循語義化版本控制原則。
這一里程碑建立在數月的改進、社群反饋和實際使用的基礎上,確立了 LogTape 作為 JavaScript 應用程式和庫的成熟且可靠的日誌記錄解決方案。
主要新功能
高效能日誌記錄基礎設施
LogTape 1.0.0 引入了幾個為高吞吐量生產環境設計的效能導向功能。新的非阻塞接收器選項允許控制台、串流和檔案接收器緩衝日誌記錄並非同步刷新,防止日誌操作阻塞應用程式的主執行緒。
import { configure, getConsoleSink } from "@logtape/logtape";
await configure({
sinks: {
console: getConsoleSink({
nonBlocking: {
bufferSize: 1000,
flushInterval: 50
}
})
},
// ...
});
新的 fromAsyncSink()
函數提供了一種整合非同步日誌操作的簡潔方式,同時維持 LogTape 的同步接收器介面。這使得將日誌發送到遠端伺服器或資料庫等場景成為可能,而不會阻塞您的應用程式。
import { fromAsyncSink } from "@logtape/logtape";
const webhookSink = fromAsyncSink(async (record) => {
await fetch("https://logs.example.com", {
method: "POST",
body: JSON.stringify(record)
});
});
對於檔案操作,@logtape/file 套件中的新 getStreamFileSink()
函數利用 Node.js PassThrough 串流提供最佳 I/O 效能,並具有自動背壓管理功能。
新的接收器整合
此版本顯著擴展了 LogTape 的整合能力,新增了兩個主要的接收器套件。@logtape/cloudwatch-logs 套件實現了與 AWS CloudWatch Logs 的直接整合,具有智能批次處理、指數退避重試策略,以及通過 JSON Lines 格式支援結構化日誌記錄。
import { getCloudWatchLogsSink } from "@logtape/cloudwatch-logs";
const sink = getCloudWatchLogsSink({
logGroupName: "/aws/lambda/my-function",
logStreamName: "my-stream",
region: "us-east-1"
});
@logtape/windows-eventlog 套件提供了原生 Windows 事件日誌支援,具有跨 Deno、Node.js 和 Bun 的運行時兼容性。這種整合使用運行時優化的 FFI 實現以獲得最大效能,同時維持適當的錯誤處理和資源清理。
美觀的開發體驗
新的 @logtape/pretty 套件將控制台日誌轉變為專為本地開發設計的視覺吸引力體驗。受 Signale 啟發,它為每個日誌級別提供彩色表情符號,智能類別截斷以保留重要上下文,以及完美的列對齊,使日誌易於掃描。
import { configure, getConsoleSink } from "@logtape/logtape";
import { prettyFormatter } from "@logtape/pretty";
await configure({
sinks: {
console: getConsoleSink({ formatter: prettyFormatter })
},
// ...
});
如上所示,美化格式化器支援真彩色終端,具有豐富的配色方案、可配置的圖標,以及智能換行功能,即使對於長訊息也能保持視覺一致性。
生態系統整合
也許最重要的是,LogTape 1.0.0 引入了適配器套件,這些套件彌合了 LogTape 的庫友好設計與現有日誌基礎設施之間的差距。@logtape/adaptor-winston 和 @logtape/adaptor-pino 套件允許使用這些已建立的日誌庫的應用程式無縫整合啟用 LogTape 的庫,而無需更改其現有設置。
// 使用 winston 快速設置
import "@logtape/adaptor-winston/install";
// 或使用自定義配置
import { install } from "@logtape/adaptor-winston";
import winston from "winston";
const logger = winston.createLogger({/* 您的配置 */});
install(logger);
這些適配器保留了 LogTape 的結構化日誌記錄功能,同時通過您偏好的日誌系統路由所有內容,使現有應用程式採用啟用 LogTape 的庫變得無障礙。
開發者體驗增強
此版本包含了幾項提升開發者使用 LogTape 體驗的改進。新的 getLogLevels()
函數提供了對所有可用日誌級別的程式化訪問,而 LogMethod
類型為日誌方法提供了更好的類型推斷。
瀏覽器兼容性已得到改進,特別是對於 @logtape/otel 套件,該套件之前在瀏覽器環境中由於 Node.js 特定的導入而存在問題。該套件現在可以在所有 JavaScript 運行時中無縫運行,不會拋出模組解析錯誤。
重大變更和遷移指南
LogTape 1.0.0 包含一個值得注意的重大變更:移除了已棄用的 LoggerConfig.level
屬性。此屬性在 0.8.0 版本中被棄用,取而代之的是更具描述性的 LoggerConfig.lowestLevel
屬性。
如果您的配置仍在使用舊屬性,只需將其重命名:
// 之前(已棄用)
{ category: ["app"], level: "info", sinks: ["console"] }
// 之後
{ category: ["app"], lowestLevel: "info", sinks: ["console"] }
對於更複雜的過濾需求,請考慮使用 LoggerConfig.filters
選項,它提供了更大的靈活性,並支援從父記錄器繼承。
完整的套件生態系統
LogTape 1.0.0 代表了一個全面套件生態系統的集大成,現在由 11 個專門解決日誌基礎設施不同方面的套件組成。這種模組化方法允許您只安裝所需的套件,在需要強大日誌功能的同時保持最小的依賴佔用。
套件 | JSR | npm | 描述 |
---|---|---|---|
@logtape/logtape | JSR | npm | 核心日誌功能 |
@logtape/adaptor-pino | JSR | npm | Pino 適配器 |
@logtape/adaptor-winston | JSR | npm | winston 適配器 |
@logtape/cloudwatch-logs | JSR | npm | AWS CloudWatch Logs 接收器 |
@logtape/file | JSR | npm | 檔案接收器 |
@logtape/otel | JSR | npm | OpenTelemetry 接收器 |
@logtape/pretty | JSR | npm | 美觀的文字格式化器 |
@logtape/redaction | JSR | npm | 資料編輯 |
@logtape/sentry | JSR | npm | Sentry 接收器 |
@logtape/syslog | JSR | npm | Syslog 接收器 |
@logtape/windows-eventlog | JSR | npm | Windows 事件日誌接收器 |
入門指南
無論您是 LogTape 的新使用者還是從先前版本升級,開始使用 1.0.0 版本都很簡單。對於新專案,從簡單的配置開始,然後逐漸添加您需要的套件和功能:
import { configure, getConsoleSink } from "@logtape/logtape";
await configure({
sinks: { console: getConsoleSink() },
loggers: [
{ category: "my-app", lowestLevel: "info", sinks: ["console"] }
]
});
使用 winston 或 Pino 的現有應用程式可以通過安裝適當的適配器立即從啟用 LogTape 的庫中受益。如需全面的遷移指導和詳細的功能文檔,請訪問我們的文檔網站。
1.0.0 版本不僅代表一個版本號,更代表了對生產應用程式所需穩定性和成熟度的承諾。我們很期待看到您使用 LogTape 構建的應用。