Googleは、Google Cloud Pythonログライブラリのバージョン3.0.0を発表した。このリリースでは、Cloud RunとCloud Functionsのサポート強化、文字列JSONペイロードのサポート、メタデータ添付の自動化など、多くの新機能が導入されている。
v3.0.0では、ライブラリでGKE、Cloud Run、Cloud Functionsなどのサポートされている環境で、GCPの構造化されたJSONログ機能を利用するようになった。ロギングライブラリは、サポートされている環境内で実行されているかどうかを自動検出し、StructuredLogHandler
を利用できる。このハンドラーは、ログをJSON文字列として標準出力に書き込み、GCPの組み込みエージェントが解析してCloud Loggingに配信できるようにする。CloudLoggingHandler
インスタンスを使ってライブラリを手動で設定することで、サーバレス環境内に以前の方法を使ってログを記録することは引き続き可能である。
これにより、Cloud RunやCloud Functionsなどのサーバレス環境でログがドロップされた場所でユーザが報告した問題が修正される。これは、ログがネットワーク経由で送信されるようにバッチ処理されたためである。バッチが送信される前に基盤となるサーバレス環境がスピンダウンされた場合、そのバッチは失われる。
ロギングライブラリは、環境に関するメタデータを自動的に検出して各ログメッセージに添付することもサポートするようになった。現在、サポートフィールドには、ログの発信元であるGCPリソース、ログのコンテキストでのHTTPリクエストに関する情報、ソースの場所(ファイル、行、関数名など)が含まれる。ライブラリはこのデータを自動的に設定しようとするが、必要に応じて次のようにフィールドを明示的に設定できる。
logging.info("hello", extra={
"labels": {"foo": "bar"},
"http_request": {"requestUrl": "localhost"},
"trace": "01234"
})
ライブラリの以前のインテレーションでは、Python標準ライブラリ統合では文字列ペイロードと共にログを送信することのみができた。この更新により、2つの別々の方法でJSONペイロードをログに記録する機能が追加されている。1つ目の方法では、JSONデータはJSON解析可能な文字列として添付される。
import logging
import json
data_dict = {"hello": "world"}
logging.info(json.dumps(data_dict))
2つ目の方法では、JSONデータはPythonのextra
引数を使用してjson_fields
ディクショナリとして渡される。
import logging
data_dict = {"hello": "world"}
logging.info("message field", extra={"json_fields": data_dict})
他に追加された機能として、提供されたタイプを推測してログに記録する新しいLogger.log
メソッドがある。以下のコード例に示すように、log関数の引数もさまざまな入力形式をサポートするようになった。
# lowercase severity strings will be accepted
logger.log("hello world", severity="warning")
# a severity will be pulled out of the JSON payload if not otherwise set
logger.log({"hello": "world", "severity":"warning"})
# resource data can be passed as a dict instead of a Resource object
logger.log("hello world", resource={"type":"global", "labels":[]})
チームは、ログの作成に標準のPythonログインターフェイスを使用することを勧めている。ただし、ログの読み取りやログシンクの管理などのユースケースでは、google.cloud.loggingを直接使用することができる。
このリリースの詳細については、v3.0.0移行ガイドとgoogle-cloud-loggingユーザガイドをご覧ください。Google Cloud Pythonロギングライブラリはオープンソースであり、GitHubで入手できる。