LoginSignup
0
2

More than 3 years have passed since last update.

Azure Table Storageにログを出力するハンドラー

Posted at

Azure WebAppsでPythonアプリを動かした時のログ出力の仕方がどんなに調べても分からなかったので諦めてAzure Table Storageに出力するハンドラーを作りました。

Github https://github.com/uezo/azure-table-storage-logging

logging.Handlerの拡張クラスなので従来のハンドラーと同じ手続きかつ併用できるのと、WebAppsに限らずあらゆるPythonアプリケーションで使えます。

インストール

$ pip install azure-table-logging

使い方

yourapp.py
import logging
from azuretablelogging import AzureTableStorageHandler

# ロガーの取得
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# ハンドラーの生成。Azure Storageのアカウント名とキー、ログを記録するテーブル名を指定
handler = AzureTableStorageHandler(
    account_name="your_account_name",
    account_key="your_account_key",
    table_name="table_name"
)

# 生成したハンドラーをロガーに追加
logger.addHandler(handler)

# あとはいつも通りログ出力
logger.debug("デバッグ")
logger.info("情報レベル")
logger.warn("警告レベル")
logger.error("エラーレベル")
logger.critical("致命的レベル")

実行すると、table_nameに指定したテーブルに5レコード追加されます。

PartitionKey RowKey Timestamp LocalTimestamp LevelName Level Message
main 251837309460.3795 2019-08-05T07:49:01.574Z "2019-08-05 16:48:59,220" CRITICAL 50 致命的レベル
main 251837309460.44092 2019-08-05T07:49:01.504Z "2019-08-05 16:48:45,687" ERROR 40 エラーレベル
main 251837309460.51297 2019-08-05T07:49:01.444Z "2019-08-05 16:48:43,586" WARNING 30 警告レベル
main 251837309460.77405 2019-08-05T07:49:01.374Z "2019-08-05 16:48:21,398" INFO 20 情報レベル
main 251837309498.6117 2019-08-05T07:48:47.676Z "2019-08-05 16:48:05,928" DEBUG 10 デバッグ

出力項目

カラム名 loggingとの対応 説明
PartitionKey %(name)s ロガーの名前
RowKey n/a ソートキー。新しいものほど値が小さい。9999年12月31日のEpochからAzure Storageに書き込む直前のEpochを引いたもの
Timestamp n/a Azure Storageに書き込まれた時間
LocalTimestamp %(asctime)s アプリケーションでログを出力した時点の時間
LevelName %(levelname)s ログ出力レベル
Level %(level)s ログ出力レベルの数値表現
Message formatterで指定した値 ログメッセージ。Formatterでフォーマット可能

その他のポイント

  • Azureへの書き込みは別スレッドで処理しており、アプリケーションのパフォーマンスにはほとんど影響を与えません。
  • 書き込みはハンドラーインスタンス毎に単一スレッドで行われるため、書き込み順序は保証されます。
  • 大量のログを出力した際のパフォーマンスや問題は検証できていません。
  • 指定したテーブル名が存在しないときは新規作成します。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2