@unikvs/debug
読み書きされる操作とデータのデバッグ情報をログに記録するミドルウェアです。
概要
@unikvs/debug は読み書きされるデータの種類や大きさをログに記録するプラグインです。Middleware
このミドルウェアはデータを変換せず、そのまま通しながら操作名とキーと方向を記録します。保存内容の流れを観察したい場合に使います。
nameはDebugです。isOpenは常にtrueです。open()は不要です。- ログの出力には
@logtape/logtapeを使います。記録するかどうかはkeyFilterとactionFilterで制御できます。
インストールは次のコマンドで行います。
npm install @unikvs/debug @logtape/logtapepnpm add @unikvs/debug @logtape/logtapeyarn add @unikvs/debug @logtape/logtapebun add @unikvs/debug @logtape/logtapenub add @unikvs/debug @logtape/logtapeaube add @unikvs/debug @logtape/logtape使い方
Debug は IMiddleware を実装しています。UniKvs には use() で渡します。
import { Debug } from "@unikvs/debug";
DebugOptions
コンストラクターの引数は次のとおりです。
プロパティ型
keyFilter?IDebugKeyFilter | undefined
記録対象のキーを判定する関数です。`true` を返したキーのみ記録します。省略した場合はすべてのキーを記録します。
型
IDebugKeyFilter | undefinedactionFilter?IDebugActionFilter | undefined
記録対象の操作を判定する関数です。`true` を返した操作のみ記録します。省略した場合はすべての操作を記録します。
型
IDebugActionFilter | undefinedgetDebugInfo?IDebugInfoCallback | undefined
データから記録する情報を作る関数です。省略した場合は型名と大きさを記録します。
型
IDebugInfoCallback | undefinedDebugDirection
DebugDirection はデータの向きを表し、write と read のどちらかになります。書き込み時の encode では write になり、読み取り時の decode では read になります。
以下は、特定のキーの書き込みと読み取りを記録する例です。
import { configureSync } from "@logtape/logtape";
import { Debug } from "@unikvs/debug";
import { Memory } from "@unikvs/memory";
import * as unikvs from "unikvs";
configureSync({
sinks: { console: (record) => console.log(record.message) },
loggers: [{ category: ["@unikvs/debug"], sinks: ["console"], lowestLevel: "debug" }],
});
const kvs = new unikvs.Builder<{ foo: unikvs.Value<string> }>()
.use(
new Debug({
keyFilter: (key) => key.startsWith("foo"),
actionFilter: (action) => action === "set" || action === "get",
}),
)
.persist(new Memory())
.build();
await kvs.open();
await kvs.set("foo", "hello");
const value = await kvs.get("foo");
console.log(value); // "hello" になります
await kvs.close();
データ型
| メソッド | 入力 | 出力 |
|---|---|---|
encode |
TData |
TData |
decode |
TData |
TData |
encodeStream |
TChunk |
TChunk |
decodeStream |
TChunk |
TChunk |
encodeでは入力データをそのまま出力し、書き込みとしてログに記録します。decodeでは入力データをそのまま出力し、読み取りとしてログに記録します。encodeStreamでは各チャンクをそのまま出力し、書き込みとして 1 件ずつログに記録します。decodeStreamでは各チャンクをそのまま出力し、読み取りとして 1 件ずつログに記録します。- フィルターに拒否された操作はログに記録しません。
エラー
このパッケージ固有のエラーはありません。
getDebugInfo が投げたエラーはそのまま伝播します。