nikkie-ftnextの日記

イベントレポートや読書メモを発信

google-genaiよ、ライブラリはルートロガーを触ってはいけません (v1.3.0で解消済み)

はじめに

七尾百合子さん、お誕生日 146日目 おめでとうございます! nikkieです。

今年google-genaiを触る中で出会っていた事象についてです。

目次

issue #278 「Please use a Gemini Logger instance instead of root.」

あのGoogleが作ったgoogle-genaiですら、ライブラリのロギング実装にルートロガーを使うという過ちを犯していました(現在は修正済み)

Currently the library logs everything with root logger and that prevents users from controlling what gets logged.

I've been getting spammed in logs with: " AFC is enabled with max remote calls: 10."

実装を見るとlogging.info()のようにルートロガーを使ってしまっています。
あるべきはlogging.getLogger()で得たロガーloggerlogger.info()呼び出しです。

私たちは暗黙的にlogging.basicConfigを2回呼んでいることがある(「Pythonのlogging.basicConfigがルートロガーを設定できるのは『一度だけ』」)

まず、logging.warningなどの関数たち。
これらは内部でlogging.basicConfigを呼び出して、ルートロガーを設定します。

ロガーインスタンスを使うようにv1.3.0で修正済み

修正はこちら

ライブラリ全体にわたって、logging.info()logger.info()に書き直しています。

Add sdk logger instance (fixes #278) (cf281b5) (Featuresより)

執筆時点の最新バージョンは 1.29.0 です。

終わりに

loggingモジュールの公式ドキュメントに向き合って理解を深めた後に現実世界のライブラリを触ると、ドキュメント通りになっていないことが多いと経験しています。
google-genaiですら、ライブラリの中でルートロガーを設定する実装をして、ユーザのロギングに悪影響を及ぼしてしまっていました。

Python公式ドキュメント内の「ライブラリのためのロギングの設定」より

ルートロガーに直接ログを記録することにより、あなたのライブラリを利用するアプリケーション開発者が、ロギングの詳細度 (verbosity) やハンドラを望みのとおりに設定することを困難にしたり、不可能にしてしまいます。

ライブラリでルートロガーを触ってはいけません