コンテンツにスキップ

EventLogger

EventLogger は、受信したイベントをログ出力するデバッグ用ミドルウェアです。内部ハンドラへの処理はそのまま委譲します。公式 API 仕様には含まれない、SDK 独自の拡張機能です。

追加インストールは不要です。mixi2-js に同梱されています。

// ESM
import { EventLogger } from 'mixi2-js/helpers';
// CJS
const { EventLogger } = require('mixi2-js/helpers');

ハンドラをラップするだけで、受信したイベントの種別と ID が自動的に出力されます。

import { StreamWatcher } from 'mixi2-js';
import { EventLogger, EventRouter } from 'mixi2-js/helpers';
const router = new EventRouter();
router.on(EventType.POST_CREATED, async (event) => {
// ...
});
// router を EventLogger でラップする
const logger = new EventLogger(router);
await watcher.watch(logger);
// → [mixi2] event received: type=2 id=xxxxxxxx
const logger = new EventLogger(handler, {
logger: console.log, // ログ出力関数(デフォルト: console.log)
verbose: true, // eventId を含めるか(デフォルト: true)
});
オプションデフォルト説明
logger(message: string) => voidconsole.logログ出力関数。既存のロガーに差し替え可能
verbosebooleantruetrue の場合、eventId をログに含める
import { EventLogger } from "mixi2-js/helpers";
// pino や winston など外部ロガーを使う場合
const logger = new EventLogger(handler, {
logger: (msg) => myLogger.info(msg),
});

他のミドルウェアとの組み合わせ

Section titled “他のミドルウェアとの組み合わせ”

EventLoggerEventHandler を実装しているため、他のミドルウェアと自由に組み合わせられます。処理の流れが分かりやすいよう、最も外側に置くのが一般的です。

import { EventDeduplicator, EventLogger, EventRouter, ReasonFilter } from "mixi2-js/helpers";
import { EventReason } from "mixi2-js";
const router = new EventRouter();
const filter = new ReasonFilter(router, [EventReason.POST_MENTIONED]);
const dedup = new EventDeduplicator(filter);
const logger = new EventLogger(dedup); // 最外層でログ
await watcher.watch(logger);
// イベント受信 → ログ出力 → 重複チェック → フィルタ → ルーティング
new EventLogger(handler: EventHandler, options?: EventLoggerOptions)
引数説明
handlerEventHandlerログ出力後に処理を委譲する内部ハンドラ
optionsEventLoggerOptions?オプション設定
メソッド戻り値説明
handle(event)Promise<void>ログを出力し、内部ハンドラに委譲