Azure functionsは実行プログラムのログが(一部だったり全部)表示がされない時があります(デバッグ時に困る。。)そんなとき、別の方法で見れたりするので、複数知っておくと助かります。そこで、複数ある参照方法をまとめました。
functionsログ参照方法
functionsのlog window
最も簡単な方法です。azureポータルにログインして該当functionsまで遷移したら、画像のようにログが流れます。
ストリーム表示なので、過去のログを追うというより、今動いてるログを確認する用になります。ここで(全部or一部)表示されなくても左下の最新の情報に更新
をクリックで表示される場合があります。
(log windowが無い場合は右上のログ
をクリック)
functionsのモニター
こちらもポータルの機能で、上記画像のモニター
をクリックで利用可能ですが、特徴として、ストリームではなく、プロセスごとにログが確認できます。実行完了した該当プロセスをクリックすると、ログが確認できます。
欠点として、この画面が重いのと表示エリアが小さいため、やや見にくいです。
Kuduのlog stream
functionsに付随するKuduサービスにログのストリーム表示があります。内容は1つ目のlog windowと同じですが、そこで確認できない場合の、予備表示ぐらいで捉えてます。
- function Appの設定 -> Kuduに移動
- Tools -> Log stream
最初の表示が遅いという難点はありますが、一度開いておけば、そのままタブ表示で置いておけるという利便性はあります。
REST API
azureにも様々なapiが用意されており、functionsのログ表示機能もあります。
そこでわざわざブラウザを開かなくて良いように、shを作成しました。
#!/bin/sh
curl \
-X GET \
-H "Authorization:Basic <base64encode(username:password)>" \
https://<functions resource name>.scm.azurewebsites.net/api/logstream/application/functions/function/<function name>
<>
内を適宜置き換えてもらえばいいのですが、
-
base64encode(username:password)
・・・functionsの認証情報(詳細は以下で説明)のusername
と:
とpassword
をくっつけた文字列をbase64エンコードしたもの -
functions resource name
・・・functionsのリソース名 -
function name
・・・functions内に作った関数名
log_stream.shを叩くと、
$sh log_stream.sh
1つ目のポータルで表示されるlog windowと同じログが参照できます。私はこれを多用してます。わざわざブラウザで遷移しなくてもいいし、他のfunctions作っても、ほぼコピペでそのまま使い回せて楽です。
ちなみにbase64エンコードは、phpであればbase64_encode()
関数があるので、以下で作成できます。
echo base64_encode("username:password");
他の言語使わずshで完結させたかったのですが、すんなり書けなかったので妥協。。。
functionsの認証情報
Function app の設定 -> App Service の設定に移動 -> デプロイ資格情報 -> FTP/デプロイ ユーザー名
とパスワード
で設定できます。
実際のところ
4つほど参照方法を挙げましたが、以下が、実際の開発でよくあるパターンで、
- functionsをポータルから作ったら、log_stream.shを用意する(参照方法4つ目)
- 表示がおかしいと思ったらポータルのlog window(参照方法1つ目)で最新の情報に更新して確認する
これでほぼ問題なくデバッグできました。