AWS SDK Node.jsのロガーを有効化する

AWS SDK Node.jsはAPI実行時のログ出力を有効化することができます。

実装方法はとても簡単で、SDKのクライアント初期化時の引数のオブジェクトのプロパティであるloggerを指定するだけです。

このプロパティはオプショナルであり、省略した場合にはログ出力はされません。

下記はDynamoDBのクライアント初期化時にconsoleオブジェクトを渡している例です。

const client = new DynamoDBClient({
  logger: console,
});

loggerプロパティの型はLoggerインターフェースとして定義されています。

つまり、下記のインタフェースを満たしている独自のカスタムロガーを指定することも可能です。

export interface Logger {
    trace?: (...content: any[]) => void;
    debug: (...content: any[]) => void;
    info: (...content: any[]) => void;
    warn: (...content: any[]) => void;
    error: (...content: any[]) => void;
}

https://github.com/smithy-lang/smithy-typescript/blob/796567dcc0c74049178d16369482b1d038e2b04e/packages/types/src/logger.ts

実際にconsoleオブジェクトを指定して挙動を確認してみましたが、結構見辛いログが出力されていました。

debug、traceは無しでinfo、warn、errorのみだけの出力に留めるなどのカスタマイズがしたいけど、今のところconsoleオブジェクトを独自でラップするような方法しか思いついていないです。

const logger = {
  trace: (...content: any[]) => {
    // no-op
  },
  debug: (...content: any[]) => {
    // no-op
  },
  info: (...content: any[]) => {
    console.info(...content);
  },
  warn: (...content: any[]) => {
    console.warn(...content);
  },
  error: (...content: any[]) => {
    console.error(...content);
  },
};

参考

https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/logging-sdk-calls.html