首頁 >web前端 >js教程 >LogLayer:適用於 TypeScript / JavaScript 的現代日誌庫

LogLayer:適用於 TypeScript / JavaScript 的現代日誌庫

Susan Sarandon
Susan Sarandon原創
2025-01-16 13:08:57167瀏覽

LogLayer: A Modern Logging Library for TypeScript / JavaScript

厭倦了跨專案使用多個日誌庫? 對不一致的錯誤和元資料日誌記錄感到沮喪? LogLayer 是一種開源解決方案,可簡化您的日誌記錄流程並增強開發人員體驗。

什麼是 LogLayer?

LogLayer 充當統一的日誌記錄層,與流行的日誌記錄庫(Pino、Winston、Bunyan)和雲端供應商(AWS、Google Cloud、DataDog)相容。 它提供了一致、直觀的 API,用於記錄訊息、元資料和錯誤,將您的日誌定向到您選擇的目的地。

這是一個簡單的範例:

<code class="language-typescript">import { LogLayer } from 'loglayer'
import { PinoTransport } from '@loglayer/transport-pino'
import pino from 'pino'

// Configure LogLayer with Pino
const log = new LogLayer({
  transport: new PinoTransport({ logger: pino() })
})

// Log with metadata
log.withMetadata({ userId: '123', action: 'login' })
   .info('User logged in successfully')

// Contextual logging (persists across calls)
log.withContext({ requestId: '123' })
log.info('Processing request') // requestId included

try {
  // ... potential error-throwing code
} catch (error) {
  log.withError(error)
     .withMetadata({ userId: '123' })
     .error('User request processing failed')
}</code>

LogLayer 的主要優勢:

  • 無縫庫切換:輕鬆切換日誌庫,無需重構程式碼。 想像一下需要在專案中期從 Pino 切換到 Winston – LogLayer 讓這變得輕鬆。

  • 一致的 API: 統一的 API 消除了跨庫記住不同方法名稱和參數順序的需要。 比較:

<code>// LogLayer's consistent approach:
log.withMetadata({ some: 'data' }).info('my message')

// Inconsistent APIs without LogLayer:
winston.info('my message', { some: 'data' })     // winston
bunyan.info({ some: 'data' }, 'my message')      // bunyan</code>
  • 多重傳輸支援:同時將日誌傳送到多個目的地(例如 DataDog 和您的記錄器):
<code class="language-typescript">import { LogLayer } from 'loglayer'
import { datadogLogs } from '@datadog/browser-logs'
import { PinoTransport } from "@loglayer/transport-pino"
import { DatadogBrowserLogsTransport } from "@loglayer/transport-datadog-browser-logs"

// Datadog initialization (replace placeholders)
datadogLogs.init({
  clientToken: '<client_token>',
  site: '<datadog_site>',
  forwardErrorsToLogs: true,
  sampleRate: 100
})

const log = new LogLayer({
  transport: [
    new PinoTransport({ logger: pino() }),
    new DatadogBrowserLogsTransport({ logger: datadogLogs })
  ]
})

// Logs sent to both Pino and DataDog
log.info('User logged in successfully')
</datadog_site></client_token></code>
  • 簡化的錯誤處理:所有函式庫的標準化錯誤處理。

  • 可擴充插件系統:為編輯敏感資料等功能新增外掛程式。

  • 輕鬆測試:內建模擬簡化了測試。

開始使用:

安裝很簡單:

<code class="language-bash">npm install loglayer</code>

基本用法:

<code class="language-typescript">import { LogLayer, ConsoleTransport } from 'loglayer'

const log = new LogLayer({ transport: new ConsoleTransport({ logger: console }) })

log.info('Hello world!')</code>

了解更多:

  • 官方文件
  • GitHub 儲存庫
  • NPM 包

以上是LogLayer:適用於 TypeScript / JavaScript 的現代日誌庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn