はじめに
bestの最上級、bestest!! nikkieです。
1ヶ月前のPyCon mini Shizuoka 2024 continueでの登壇報告エントリです。
目次
ライブラリ開発者に贈る「ロギングでNullHandler以外はいけません」
登壇予告
スライド
明日2/8(土)の静岡開催 #pyconshizu のスライド放流です。
— nikkie(にっきー) / にっP (@ftnext) 2025年2月7日
ライブラリ開発者に贈る「ロギングで NullHandler 以外はいけません」https://t.co/pRlAAeWcEn
ライブラリでのロギングが以下の2行になる理由を解説します!
logger = logging.getLogger(__name__)
logger.addHandler(logging.NullHandler())
#pyconshizu このあと13:20〜話します
— nikkie(にっきー) / にっP (@ftnext) 2025年2月8日
ライブラリ開発者に贈る「ロギングでNullHandler以外はいけません」https://t.co/pRlAAeWcEn
本ツイートが要点まとめなので、「ふーんそういうことね」という方は裏の筒井さん(Cloudflare Workers)を、「解説ください!」という方は30分お付き合いいただければ pic.twitter.com/hPqMX5MmW4
発表中の皆さんのツイートはこのあたりです。
https://posfie.com/@ftnext/p/GiCxLWu?page=8#h188_0
発表後記
この2行についてだけ30分話しました。
logger = logging.getLogger(__name__) logger.addHandler(logging.NullHandler())
話したい話題だった1ので、発表の機会が実現して楽しく話していました。
今回の構成としては
- ライブラリ開発者向け
- ロガー
- ハンドラ
- アプリケーション開発者向け(=ライブラリのユーザ)
- ロガー(ルートロガー、伝播)
- 再びライブラリ開発者向けに:ロガーのレベル
です。
ライブラリ開発者 -> アプリケーション開発者 -> ライブラリ開発者 と往復します。
何回か練習して臨んだのですが、本番の空気感の影響か、話している途中でより分かりやすくなるんじゃないかという構成が降りてきたんですよね
- まずロガーのレベルの話をする
- 親のロガーのレベルを見る話
- ルートロガーにハンドラを設定(=ロギングできる!)
- その後、子のロガーのハンドラの話
loggingモジュールの解説だけを考えると、行ったり来たりしないこちらの方が分かりやすいかもと考えています。
こちらの構成の場合、「ライブラリのロギングは上記2行」と伝え切れるかは手を動かしてみないと分かりませんが...
いただいた反応
質問ありがとうございました!
質問ありがとうございました
— nikkie(にっきー) / にっP (@ftnext) 2025年2月8日
ルートロガーを設定してしまっているライブラリのロギングをアプリケーションでカスタマイズするには、basicConfig()のforce=Trueがあります!https://t.co/blIT8H0lmg
ルートロガーを設定してしまっているライブラリを自分のライブラリで使うのは大変です.. #pyconshizu
からあげさんのイベントレポートでも触れていただいています。
ただ、自分の知識があまりになく途中でついていけなくなりました。自分はロガーのことが全然分かっていないという貴重な知見を得ることができました。
聞いていただき、ありがとうございました!
降ってきた構成でアウトプットしてみようかな〜
関連エントリ
(こちらの記事内にたくさんリンクあります)
延期期間で得た知識はlogging.config
happy-python-logging、育てるぞ〜(私が幸せにしてあげる!)
終わりに
PyCon mini Shizuoka 2024 continueで、ライブラリでのロギングの話をしました。
一連のアウトプットの中でロギングの理解は深まり、シンプルな構成要素1つ1つが組み合わさってロギングを提供している様子には美しさを感じます。
一方、ここまで理解しないと使いこなせないという点は、なんとかならないかなとも思います2(誤った方法のライブラリを私がいくつも踏んで、この知見を得ました)
イベントレポートはこちらです。
運営スタッフ、登壇者、参加者の皆さま、素晴らしい機会をありがとうございました!