70:個別の名前でロガーを作らない

ロギングの設定が上手に書かれていないと、煩雑になりがちです。 ここではロガーの効果的な設定方法を学びましょう。

具体的な失敗

logging.config.dictConfig({
     ...
     "loggers": {
         "product_detail_view": {},
         "product_edit_view": {},
         "import_products_command": {},
         "export_sales_command": {},
         "sync_ma_events": {},
         "sync_payment_events": {},
         ...
     }
})

この設定の場合、ロガーを1つ増やすたびにロギングの設定を足す必要があります。

ベストプラクティス

ロガーはモジュールパス __name__ を使って取得しましょう。

import logging

logger = logging.getLogger(__name__)

こうするとロギングの設定はまとめて書けるようになります。

logging.config.dictConfig({
    ...
    "loggers": {
         "product.views": {},
         "product.management.commands": {},
    }
})

Pythonでは「 . 」区切りで「上位」(左側)のロガーが適応されます。 ロガーの名前が product.views.api のときは product.views.apiproduct.viewsproduct `` と順にログの設定を探して、設定があれば使われます。

Pythonは __name__ で現在のモジュールパスが取得できるので、 product/views/api.py というファイルでは product.views.api になります。

ロガーすべてに毎度名前をつけていると、ロガーごとに設定が必要になり面倒です。まとめて設定することで設定の数を減らせます。 Pythonのモジュール名にすることでロガーの命名規則を考える必要もなくなります。

cover

(中略)詳細は書籍 自走プログラマー をご参照ください