Google Cloud Logging не работает из-за облачной функции - PullRequest
1 голос
/ 31 марта 2020

В настоящее время я пытаюсь развернуть облачную функцию, запускаемую Pub / Sub, написанную в Python. Ранее мы использовали логуру для входа. Сейчас я делаю переход к облачной регистрации. Я думал, что это будет довольно просто, но я довольно озадачен. Вот код, который я развернул в облачной функции, просто для того, чтобы попытаться войти в систему:

import base64
import logging
import google.cloud.logging as google_logging

def hello_pubsub(event, context):
     client = google_logging.Client()
     client.setup_logging()
     logging.debug("Starting function")
     logging.info("Hello")

     logging.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     logging.info(pubsub_message)
     logging.error("Exit function")

Я следовал документации, которую смог найти по этому вопросу (но страницы могут показывать различные методы и не очень понятны) , Вот результат в интерфейсе ведения журнала:

Resulting logs in

Это результат в «глобальных» журналах. Здесь два вопроса: почему не отображаются журналы отладки, даже если я явно установил уровень журнала как «отладочный» в интерфейсе? И почему журналы отображаются случайным образом 1, 2 или 3 раза?

Теперь я пытаюсь отображать журналы только для моей облачной функции:

Resulting logs in

Это ухудшается, теперь журналы отображаются до 5 раз (и даже не столько раз, сколько на вкладке "Глобальные"), все уровни информации неверны (logging.info приводит к 1 информационная строка, 1 строка ошибки; ошибки и предупреждения приводят к 2 ошибкам ...)

Я предполагаю, что я, должно быть, делаю что-то плохое, но я не вижу что, как то, что я пытаюсь сделать это довольно просто. Может кто-нибудь, пожалуйста, помогите мне? Спасибо !

РЕДАКТИРОВАТЬ: я сделал ошибку, поместив инициализацию клиента в функцию, это объясняет, что журналы отображались более одного раза. Осталась одна проблема: предупреждения отображаются как ошибки на вкладках «Облачная функция» и корректно отображаются на вкладке «Глобальные». У кого-нибудь есть идеи по этому поводу?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы должны использовать Интеграция с Python модулем регистрации¶

import logging
import base64
import google.cloud.logging # Don't conflict with standard logging
from google.cloud.logging.handlers import CloudLoggingHandler
client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client)
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO) # defaults to WARN
cloud_logger.addHandler(handler)



def hello_pubsub(event, context):

     import logging
     cloud_logger.debug("Starting function")
     cloud_logger.info("Hello")

     cloud_logger.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     cloud_logger.info(pubsub_message)
     cloud_logger.error("Exit function")

     return 'OK', 200

enter image description here

1 голос
/ 31 марта 2020

Попробуйте переместить настройку за пределы функции:

import base64
import logging
import google.cloud.logging as google_logging

client = google_logging.Client()
client.setup_logging()

def hello_pubsub(event, context):
     logging.debug("Starting function")
     logging.info("Hello")

     logging.warning("warning ! ")

     pubsub_message = base64.b64decode(event['data']).decode('utf-8')
     logging.info(pubsub_message)
     logging.error("Exit function")

Как есть, вы добавляете новые обработчики для каждого запроса на каждый экземпляр.

...