🦕

Deno Deployで使えるログモジュールを作った

2021/09/07に公開

以前、Denoのログを整形する記事を書きました。
こちらでは、std/logを使用し、コンソールとファイルへのログ出力を行っていました。
https://zenn.dev/kawarimidoll/articles/b1d9bc15aaa99c

ただ、最近はDeno Deployを触ることが多くなり、ファイル出力系の機能があるモジュールが足枷になることが増えてきました。
Deno Deployには(少なくとも本記事執筆時点では)writeFile系のAPIが存在しないため、型エラーが起きて使用できないのです。

類似のモジュールはいくつか存在しますが、多くがstd/logを内部的に利用していたり、ファイル出力機能を持っていたりするため、同様の問題が見られました。
ということで、Deno Deployと競合しないログモジュールを作りました。

https://deno.land/x/tl_log

時刻とレベルを表示する、Time-Level-Logということでtl_logです。

こんな感じに出力されます。


様々な型での出力例

機能

std/logなど既存のものに対する差別点は以下のとおりです。

  • ファイル系の機能を持っていないため、ローカルでもDeno Deployでも使えます。
  • 引数を透過的にconsoleメソッドに渡します。
    • このため、文字列以外でも、複数の値でも出力できます。
    • 値の色づけや整形はDenoデフォルトのものが使用されます。
  • ログレベルを尊重します。
    • 例えば本ライブラリのlog.infoを使うとconsole.infoが、log.warnを使うとconsole.warnが、それぞれ内部的に使用されます。
    • このため、debuginfoは標準出力に、warnerrorは標準エラー出力に書き出されます。
    • Deno DeployのWeb UI上のログレベルとも対応します。
  • ログレベルを制限できます。
    • 「ローカル環境ではdebugログを出し、本番環境では出さない」といったことが可能です。
  • ログレベルを記号で表示します。
    • このため、必要な情報を出しつつ、表示をシンプルにできます。
    • これはlog_symbolsを参考にしました。
    • 文字で出力する設定も可能です。
  • ログ毎に空行を挟む機能があります。
  • 時刻表示は自由にフォーマットできます。
    • Pteraを使用しています。

https://zenn.dev/tak_iwamoto/articles/8b32b27bd577b1

つかいかた

doc.deno.landにてドキュメントを公開中です。
https://doc.deno.land/https/deno.land/x/tl_log/mod.ts

なお、「doc.deno.landとは?」に関してはこちらの記事で紹介しているので御覧ください。
https://zenn.dev/kawarimidoll/articles/eb60c117266137

使用例

リポジトリにexampleファイルを載せています。

Deno CLIで使う

リポジトリをクローンしてexamples/console.tsを実行してみてください。
…と言っても良いのですが、Denoはオンラインのファイルを直接実行できるので、以下のコマンドを叩けば簡単に出力を確認できます。

deno run https://deno.land/x/tl_log/examples/console.ts

本記事のはじめの方に載せた画像と同じようなログを見られるはずです。

Deno Deployで使う

本ライブラリが強く意識しているポイントです。

こちらもexamples/server.tsを用意しています。
Deno Deploy Beta 2 APIにより、以下のコマンドでサーバー起動が可能です。

deno run --allow-env --allow-net https://deno.land/x/tl_log/examples/server.ts

Deno Deploy Beta 2に関しては以下の記事で解説しています。
https://zenn.dev/kawarimidoll/articles/38d5c3d82e6882

もちろん、従来どおりdeployctlも使えます。

deployctl run --libs="" https://deno.land/x/tl_log/examples/server.ts

サーバー起動後にhttp://localhost:8080/[適当なpath]にアクセスするとログが流れます。

また、このファイルをそのまま本番のDeno Deployで使用することも可能です[1]
ログレベルの制限をかけているので、ローカルと本番とでの出力結果の変化を見られると思います。

ちなみに、Deno DeployのWeb UIのログは 新しいものが上に来る ことはご留意ください。
https://twitter.com/KawarimiDoll/status/1433763536254038021
このツイートの画像のとおり、Web UIにはデフォルトで時刻とログレベルを表示する機能があるのですが、それが少し使いづらい(ログ本体と遠い)ので、今回自作してみました。
なお、この画像は本ライブラリの開発中のものなので、現行版とは表示が異なります。

おわりに

上記のツイートにはDeno開発チームの中の人からメンションをもらったので、Web UIの表示も更新されるのかもしれません。
https://twitter.com/lcasdev/status/1434815746358628352

今回作成したリポジトリはこちら。Starしていただけると嬉しいです。
https://github.com/kawarimidoll/deno-tl-log

脚注
  1. リポジトリ連携はできないが、ファイルURLは指定できるはず ↩︎

Discussion