目次
各リクエストの非同期処理に紐づく値を保持できます。
AsyncLocalStorage は Node.js が提供するクラスです。
各リクエストの非同期処理毎に独立した値(ストア)を保持できます。
その値としてロガーを保持すれば、リクエストごとに異なるロガーを参照できます。
各リクエストに紐づくロガーは分離して使用できるので、リクエストIDなどを付与させることも可能です

AsyncLocalStorage 自体がロガーを作るわけではありません。ロガー自体は pino とか フレームワークなどで別で作成する必要があります
https://nodejs.org/api/async_context.html#asynchronous-context-tracking
各インスタンスはAsyncLocalStorage独立したストレージコンテキストを保持します。複数のインスタンスが同時に存在しても、互いのデータに干渉するリスクはありません。
Node.js AsyncLocalStorage 公式ドキュメント
https://nodejs.org/api/async_context.html#asynchronous-context-tracking
TypeScript で使用する場合、ジェネリクスで型を指定できます
AsyncLocalStorage<T>
AsyncLocalStorage の主要なメソッド
run(store, callback)指定した値を保持した状態で、callback を実行します。
storage.run({ requestId: 'abc' }, () => {
// この中では requestId を取得できる
})storage.run(store, callback)
- 第1引数
store
その非同期処理で保持したい値です。 - 第2引数
callback
そのstoreを有効にした状態で実行する処理です。
getStore()現在保持されている値を取得します。
const store = storage.getStore()enterWith(store)現在の非同期処理に値を設定します。
storage.enterWith({ requestId: 'abc' })