しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure WebJobs でログを出力する方法をまとめる

ちょっと前に Azure WebJobs のログ周りで少し躓いたので、少し挙動を調べてみました。

Console.WriteLine を使う

単純なコンソールアプリケーションを WebJobs として実行する場合には、Console.WriteLine を使うだけでランタイムがログとして保存してくれます。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("log message");
    }
}

ただし、単純に Console.WriteLine を使っただけでは、日本語を書きだした時に化けます。

普通にコンソールで文字列出力するとエンコーディングが UTF-8 以外になっているのが原因なので、回避するために OutputEncoding で UTF-8 を明示的に指定してあげます。

class Program
{
    static void Main(string[] args)
    {
        // UTF-8 を出力エンコーディングに指定しないと化ける
        Console.OutputEncoding = Encoding.UTF8;

        Console.WriteLine("テストメッセージ");
    }
}

これで再度実行すると、日本語がちゃんと出力されているのが分かります。

入力値をログで書きだす場合には、マルチバイト文字が混ざってくる可能性があるので常に設定しておきたいですが、開発中に表示がおかしくなるので Release ビルドの時のみ有効にしておいた方が良いでしょう。

TextWriter をバインドする

Azure WebJobs SDK を使う場合には TextWriter を logger という名前で引数に追加しておけば、ランタイム側がいい感じにログとして扱ってくれるようになります。

メソッド内では WriteLine などを使って書き込むだけになります。

public class SampleJobs
{
    public static void SampleFunc([QueueTrigger("queue")] string message, TextWriter logger)
    {
        logger.WriteLine("キュー受信:" + message);
    }
}

メソッドと実行履歴単位で確認出来るので、WebJobs SDK を使う場合には logger を使った方が便利です。

Console.WriteLine で書きだした場合には、メソッド単位にならないのでそこだけ注意ですね。