組み込み開発のためのPython · レッスン 208 / 220

loggingで再現可能な記録を残す

時刻・レベル・条件をログに記録し、画面表示と調査記録を使い分けます。

後から原因を調べるには、何が起きたかだけでなく、どの条件で起きたかを残す必要があります。用途に合わせたログレベルと、秘密情報を含めない記録方針を作ります。

printからレベル付きログへ

`logging`はDEBUG、INFO、WARNING、ERRORなどの重要度を使い分け、出力形式や保存先を設定できます。通信の生バイトを大量に記録すると、機密情報や容量の問題を生むことがあるため、記録項目と保存期間を決めます。

再現に必要な条件も残す

ログには実行開始時刻、ソフトウェア版、接続先、設定値、タイムアウト、失敗した処理を含めます。ただしパスワード、アクセストークン、個人データは記録しません。複数機器の時刻を比較する場合は、時刻源と時差、単調時計と実時間の使い分けにも注意します。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(name)s: %(message)s",
)
logger = logging.getLogger("bench.serial")
logger.info("接続開始: port=%s baud=%d", "/dev/ttyUSB0", 115200)
try:
    raise TimeoutError("応答待ち")
except TimeoutError:
    logger.exception("機器から応答がありません")

手を動かす課題

正常接続・再試行・タイムアウトの各状況で、秘密値を含めずに調査可能なログを出してください。

参考資料

「5. ファイル・文字コード・ログデータ」の章一覧へ