搜尋
首頁web前端js教程LogTape .eleased:有什麼新內容?

LogTape .eleased: What

LogTape,一個用於 JavaScript 和 TypeScript 的零依賴結構化日誌庫,已發布 v0.6.0。發生了什麼變化?

覆蓋父記錄器的接收器

LogTape 的功能之一是透過分層類別繼承接收器。例如,如果您設定兩個記錄器,如下所示:

import { configure, getConsoleSink, getFileSink } from "@logtape/logtape";

await configure({
  sinks: {
    console: getConsoleSink(),
    file:    getFileSink("app.log"),
  },
  loggers: [
    { category: ["app"],           level: "debug", sinks: ["file"] },
    { category: ["app", "module"], level: "debug", sinks: ["console"] },
  ],
});

寫入["app"] 記錄器的日誌只會儲存到app.log 文件,但寫入["app", "module"] 記錄器的日誌將同時儲存到app.log 檔案

app.log

檔案並輸出到控制台。這是因為 ["app", "module"] 記錄器繼承了其父類別 ["app"] 的接收器。 但是,有時您可能不希望出現這種行為。從 LogTape 0.6.0 開始,您現在可以
覆寫

父記錄器的接收器。例如,如果您為子記錄器啟用parentSinks:「覆蓋」選項,如下所示:
await configure({
  sinks: { /* omitted; same as above */ },
  loggers: [
    { category: ["app"],           level: "debug", sinks: ["file"] },
    { category: ["app", "module"], level: "debug", sinks: ["console"], parentSinks: "override" },
  ],
});

寫入["app"]記錄器的日誌只會保存到

app.log

文件,寫入["app", "module"]記錄器的日誌只會輸出到

app.log

檔案控制台。這是因為子記錄器 ["app", "module"] 覆蓋了 ["app"] 記錄器的接收器。

當然,預設值是parentSinks:“繼承”,所以如果你不指定該選項,它將像以前一樣運行。

如果您對新增此功能的背景感到好奇,請參閱 GitHub Issue #15。

允許訊息範本中的佔位符使用前導/尾隨空格
logger.info("Hello, { name }!", { name: "Alice" });

在先前的版本中,如果您這樣登入:

logger.info("Hello, {name}!", { name: "Alice" });

與預期相反,一條日誌Hello, undefined!將會被建立。這是因為佔位符 { name } 包含空格字符,因此它會尋找屬性「 name 」而不是「 name 」。換句話說,您必須像這樣刪除佔位符中的空格:

logger.info("Hello, { name }!", { " name ": "Alice" });

或在實際屬性名稱中加入相同的空格,如下所示:


雖然嚴格來說這並不是一個錯誤,但根據編碼習慣,它是容易出錯的行為。
logger.info("Hello, { name }!", { name: "Alice" });

但是,從LogTape 0.6.0開始,即使佔位符的開頭和結尾有空格,它也會尋找不含空格的屬性名稱。例如,如果您像這樣登入:


正如預期的那樣,日誌是你好,愛麗絲!將被創建。
logger.info("Hello, { name }!", { name: "Alice", " name ": "Bob" });

但是,如果存在完全匹配的屬性(包括空格字元),則會優先考慮。例如,如果您像這樣登入:

你好,鮑伯!將被記錄而不是你好,愛麗絲! 。

如果您想了解此功能新增的背景,請參閱 GitHub Issue #16。

LogRecord.rawMessage 屬性

LogRecord 是一種資料類型,在 LogTape 輸出和格式化之前表示日誌。

雖然 LogRecord.message 屬性已經存在,但該屬性包含訊息範本中的佔位符替換為實際屬性值後的結果。這在大多數情況下已經足夠了,但是當日誌輸出目的地(接收器)是另一個日誌系統時,您可能希望分別輸出原始訊息範本和屬性值,從而允許接收日誌系統用屬性取代訊息範本中的佔位符直接值。
logger.info("Hello, {name}!", { name: "Alice" });

LogTape 0.6.0 中新增的 LogRecord.rawMessage 正是用於此目的的屬性,其中包含訊息範本的原始狀態以及未替換的佔位符。例如,如果您像這樣登入:

LogRecord.message 將包含值 ["Hello, ", "Alice", "!"],LogRecord.rawMessage 將包含值 "Hello, {name}!"。

如果您想了解此功能新增的背景,請參閱 GitHub Issue #17。

可自訂的內建文字格式化程序
export type TextFormatter = (record: LogRecord) => string;

文字格式化程式是一個接口,它決定每個日誌如何在流接收器、文件接收器等中格式化為文字。實際的型別定義非常簡單:

但是,每次直接定義文字格式化程式可能會很麻煩,因此 LogTape 內建了 defaultTextFormatter 和 ansiColorFormatter 供您使用。到目前為止,由於無法進行其他配置,因此您必須按原樣接受預定格式。例如,如果您不喜歡像「警告」這樣的日誌等級輸出為像 WRN 這樣的三個字母縮寫,則必須從頭開始實作 TextFormatter。 但是,從 LogTape 0.6.0 開始,您可以透過 getDefaultTextFormatter() 和 getAnsiColorFormatter() 函數根據自己的喜好自訂各種格式設置,而無需從頭開始實作 TextFormatter。

For example, if you want to represent log levels like "warning" as a single uppercase letter W, you can configure it like this:

const myFormatter = getDefaultTextFormatter({ level: "L" });

Or if you want to omit the date and timezone from the timestamp and only show the time, you can configure it like this:

const myFormatter = getDefaultTextFormatter({ timestamp: "time" });

For descriptions of more formatting options, please refer to the related documentation.

If you're curious about the background of this feature addition, please refer to GitHub issue #13.

Get it from JSR and npm

LogTape 0.6.0 is already available on JSR and npm, so get it now!

deno add @logtape/logtape@0.6.0  # Deno
npm  add @logtape/logtape@0.6.0  # npm
pnpm add @logtape/logtape@0.6.0  # pnpm
yarn add @logtape/logtape@0.6.0  # Yarn
bun  add @logtape/logtape@0.6.0  # Bun

Happy logging!

以上是LogTape .eleased:有什麼新內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在JavaScript中替換字符串字符在JavaScript中替換字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

自定義Google搜索API設置教程自定義Google搜索API設置教程Mar 04, 2025 am 01:06 AM

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

示例顏色json文件示例顏色json文件Mar 03, 2025 am 12:35 AM

本文系列在2017年中期進行了最新信息和新示例。 在此JSON示例中,我們將研究如何使用JSON格式將簡單值存儲在文件中。 使用鍵值對符號,我們可以存儲任何類型的

構建您自己的Ajax Web應用程序構建您自己的Ajax Web應用程序Mar 09, 2025 am 12:11 AM

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10個jQuery語法熒光筆10個jQuery語法熒光筆Mar 02, 2025 am 12:32 AM

增強您的代碼演示文稿:10個語法熒光筆針對開發人員在您的網站或博客上共享代碼段的開發人員是開發人員的常見實踐。 選擇合適的語法熒光筆可以顯著提高可讀性和視覺吸引力。 t

8令人驚嘆的jQuery頁面佈局插件8令人驚嘆的jQuery頁面佈局插件Mar 06, 2025 am 12:48 AM

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

什麼是這個'在JavaScript?什麼是這個'在JavaScript?Mar 04, 2025 am 01:15 AM

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

10 JavaScript和JQuery MVC教程10 JavaScript和JQuery MVC教程Mar 02, 2025 am 01:16 AM

本文介紹了關於JavaScript和JQuery模型視圖控制器(MVC)框架的10多個教程的精選選擇,非常適合在新的一年中提高您的網絡開發技能。 這些教程涵蓋了來自Foundatio的一系列主題

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!