🪵

console.log は長すぎる出力を省略する

2023/07/18に公開

起きた事象

Deno + Slack API 使って投稿されたメッセージを集計するアプリケーションを作っていたのですが、動作確認のため console.log() を使って出力を確認したところ

image_url: "https://example.com/hoge/abcde",
image_url: "https://example.com/hoge/fuga/piyo/abcdefg1234567...",
image_url: "https://example.com/fuga/12345",

一部の出力が上記の様に...の形で省略(truncate?)されていました
API の仕様や実装のバグを疑い色々調査しましたが

  • Slack API のドキュメントを読んでも省略に関する情報はない
  • Deno のドキュメントにも省略に関する情報はない
  • 全てが省略されるわけではなく、一部の値のみが省略される
  • https://api.slack.com/methods/search.messages/test だと省略されない
  • ファイルに出力してみると省略されない(ここで console.log() を疑う)

という状況でした

なぜ省略されるのか?

答えは stackoverflow にありました
https://stackoverflow.com/questions/55463865/node-console-log-on-large-array-shows-86-more-items

console.log() は内部的に util.inspect を使用しており、適切なデバッグ情報を出力するために長すぎる出力を切り捨てています

https://nodejs.org/api/util.html#utilinspectobject-showhidden-depth-colors

The output of util.inspect may change at any time and should not be depended upon programmatically.

とあるので、出力の確認として console.log() を使用するのは不適切なようでした

どうするべきか

  • process.stdout を使用する
  • JSON.stringify() を通してから出力する

などで対処できそうです
解釈に誤りやより適切な対処法があればコメントで指摘お願いします

EGSTOCK,Inc.

Discussion