@mono0926 さんから Stackdriver についてコメントをいただき、それを見るのが一番良さそうです
Cloud Functions のログを見るのに一番手っ取り早いのは、管理画面から直でログをみる方法です。
リアルタイムにログも流すことができて、ログレベルも見やすいですね。
しかし欠点があって、1行が長いログを開いてスクロールすると下まで見切れずに次のログが表示されてしまったり、ログをコピーしようと思ってもうまくコピーできません。
Developer Tools で要素の検証からアクセスすればみれますが、面倒ですね。
firebase functions:log
そんな時はコマンドラインからログを参照しましょう。
firebase functions:log
のコマンドでログを取得して表示できます。
--only functionName
, --lines 10
のように引数をつけてログの取得もできます。
実際にやってみると
$ firebase functions:log --only addMessage --lines 5
2017-12-12T13:32:41.096Z N addMessage: undefined
2017-12-12T13:34:30.832550500Z D addMessage: Function execution started
2017-12-12T13:34:30.832615922Z D addMessage: Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictions
2017-12-12T13:34:31.411Z I addMessage: IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
..中略..
finished: false,
_head
2017-12-12T13:34:32.053563601Z D addMessage: Function execution took 1222 ms, finished with status code: 303
という感じでコマンドラインでログを取得できました。これならコピペもできますね。
しかし長すぎるログは途中でカットされてしまうようです。
カットされたログは2500文字程度だったので、その程度が目安かもしれません。
コマンドラインでもログを Streaming したかった
コマンドだとログを1発取得しかできずに Streaming することができません、対して管理画面ではログが Stream で流れてきます。
10秒に1回 firebase functions:log
を叩いて、新しいログがあればそれを表示する仕組みを作ればコマンドラインでも Streaming になるのではと思い、やってみました。
Gif の再生時間が長くてわかりにくいですが、コマンド実行後は待っているだけで最新のログが取得されていきます。
しかしこのやり方は 失敗 で、理由は以下です。
-
firebase functions:log
の取得が遅くログが出てくるまで結構ラグが生まれてしまう - ログの取得は重いようで、連続してアクセスすると 500 エラーが返ってきてしまう
- サーバに負荷をかけてしまうようなのでログのポーリングはすべきでない
ソースコードは以下に公開していますが、使用は非推奨です。
https://github.com/starhoshi/firebase-log-tailer
結論
- リアルタイムのログを眺めたいときは管理画面からログを眺めましょう
- ログをコピーしたいとき、長いログをみたいときは
firebase functions:log
で確認しましょう