PM2とbunyanを共存させる方法

1 min読了の目安(約1100字TECH技術記事

JavaScriptでBotを作ったので、クラッシュしてもちゃんと再起動してくれるようにしたいな~と思っていたらPM2(foreverが主流かと思ってたらあっちは非推奨になってた)があったので使ってみたら、bunyanのログをパースできないことに気づいたのでそのやり方を備忘録的に書きます。

PM2とは

Process Manager 2の略らしい。
とにかくJavaScriptのアプリケーションをProcessとして起動、管理するのに特化しているツールです。
アプリケーションを編集したら自動再起動とか、アプリケーションがクラッシュしたら自動再起動とか、とりあえずめちゃ便利なツール。

https://github.com/Unitech/pm2

bunyanとは

JavaScriptのロガー
ちょっと特殊で、標準ストリームへの出力はJson形式になっている。
それをbunyanでパースして、きれいなログに整形、出力する。
ログがJson出力されるので、あとから整形、解析するのに非常に便利

https://github.com/trentm/node-bunyan

今回やりたいこと

PM2は pm2 log [アプリ名] でアプリのログを確認できるのですが、それをbunyanでパースしたい。
しかし、PM2はログの前にアプリ名を表示するので、bunyanでパースできない。

↑こんな感じになる

これを、bunyanでしっかりパースしたい

やり方

ログを生データで出力するオプションを利用する。
実はこのオプション、私と同じbunyanを利用したい人がissueを開き実装されたもの。

https://github.com/Unitech/pm2/issues/709#issuecomment-83626490

-r -raw みたいなオプションあったら便利よね」

https://github.com/Unitech/pm2/pull/1201

実装されたPR

https://github.com/Unitech/pm2/issues/709#issuecomment-95053012

「完璧に動作するぜ!」

こちらの流れにある通り、pm2 log [アプリ名] --raw が動作するので、以下のようにすればbunyanが使えます。

pm2 log [アプリ名] --raw | bunyan

以上