💬

Batch for Google Cloudのログのseverityについて調べてみた

2024/05/09に公開

Batch for Google Cloud(以降Batch)において、Pythonのloggerを使ってログをだしていたのですが、log levelをDEBUGにしていても、Cloud Logging上のseverityがERRORででてしまっていました。

これはpythonのloggerはデフォルトでは標準エラー出力にログを出すためだと思われます。
https://docs.python.org/ja/3/library/logging.handlers.html#logging.StreamHandler

下記を参考にseverityがどうやったら変わるかをちょっと観察してみました。
https://cloud.google.com/batch/docs/write-task-logs?hl=ja

code

import logging
import json
import sys

import google.cloud.logging

logging.basicConfig(format="[%(asctime)s][%(levelname)s] %(message)s", level=logging.DEBUG)
logger = logging.getLogger(__name__)
logging_client = google.cloud.logging.Client()
logging_client.setup_logging()
logger.setLevel(logging.DEBUG)

logger.debug("logger log for sample_logging")

print("print log for sample_logging")
print("print log stderr for sample_logging", file=sys.stderr)

inf_entry = dict(
    severity="info",
    message="structured info log for sample_logging",
)
print(json.dumps(inf_entry))

error_entry = dict(
    severity="error",
    message="structured error log for sample_logging",
)
print(json.dumps(error_entry))

これをmain.pyとして、Dockerイメージを作りBatch上で動かしてみました

Result

logger.debug


log levelがdebugでもseverityはERRORになりました。
これは標準エラー出力に出す場合、severityはすべてERRORになるためだと思われます。


printだとseverityはINFOでした

printで標準エラー出力を指定してだすと、severityはERRORでした


structured logでseverityを指定すれば、その通りにseverityが指定されています。

loggerの設定でstreamをstdoutにした場合も見てみます。

code

import logging
import json
import sys

import google.cloud.logging


logging.basicConfig(format="[%(asctime)s][%(levelname)s] %(message)s", level=logging.DEBUG, stream=sys.stdout)
logger = logging.getLogger(__name__)
logging_client = google.cloud.logging.Client()
logging_client.setup_logging()
logger.setLevel(logging.DEBUG)

logger.debug("logger log for sample_logging")


こうすると、severityはINFOででます(DEBUGではない)

structured logで標準エラー出力にだしてみる(実装割愛)と下記のような結果になりました。

Conclusion

Batchでは、unstructured logだと標準出力にログを出すとseverityはINFO、標準エラー出力だとseverityはERRORになる。

structured logであれば、標準出力、標準エラー出力にかかわらず指定したseverityでログがでる。

なにかの参考になれば!

Discussion