Azure Functions で使用するログについて

Application Insights の使用

Azure Functions で使用するログとして一番簡単なのは、既定で使用可能な、Azure ストレージを使用する組み込みログ。 追加で必要な設定なども特に不要で、Azure ポータルからもすぐに確認できるので初めは便利だが、Azure ポータルで表示されない事も多々あり、サブやテスト的に使う以外はあまりお勧めできない。 メインのログとして記録・参照する必要があるのであれば、Application Insights (AI) の使用に切り替えるのをお勧めする。

AI も取りこぼしがなくてそこまで信頼性が高いかと言われると微妙なところだが、組み込みのログよりは全然マシ。 また、機能的にもライブ メトリック ストリームでリアルタイムに確認できたり、一般的な検索も Azure ポータルから簡単に行える。やろうと思えば、クエリによる検索も可能。

log4net ログの使用

AI でデバッグログやトレースログを含む大量のログ出力を行った事がないので、本当は AI 一本でも可能なのかもしれないが、大量に出力される可能性があるデバッグ系ログは、今のところ自分は log4net を使用したファイル出力で対応している。 通常のログファイルとしてダウンロードしてエディタで見れるので、誰でも直感的に確認しやすい。

ただ注意点として、Azure Functions の永続ストレージ(ローカルストレージ)が、同一ストレージリソースを複数インスタンスで共通して利用する仕様の為、複数インスタンスから単純にログ出力すると、排他制御で問題が発生する点がある。MinimalLock モードで書き込み毎に排他すれば複数インスタンスからの同一ログ書き込み自体は行えるが、今度はログの取りこぼしが結構な割り合いで発生するので、これも個人的にはお勧めできない。

複数インスタンスでも取りこぼしなくログ出力するには、ログファイル名にインスタンスの情報を含めるとかが考えられるが、それはそれでログ内容を検索するのが大変になりそうなので、そこまでするなら AI や DB など排他の心配が不要なリソースを利用した方が良いかもしれない。

まとめ

基本は、Application Insights を使用。Info 系、Error 系など最低限のログ出力であれば、リアルタイムで確認できることもあり、便利。 AI にプラスして、Debug 系など大量に出力される可能性があるログに関しては、単一インスタンスであれば log4net によるログファイル出力が簡単。 複数インスタンスで実行される可能性がある場合は、単純な log4net ログファイル出力だと排他の問題が発生する為、AI や DB など排他の心配が不要なリソースの利用を検討する。