这里是我的代码的超级缩写版本(我将在注释中添加指向所有内容的链接)
import ... ... def main(data, context): log_client = logging.Client() log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions' res = Resource(type="cloud_function", labels={ "function_name": "refresh_classes", "region": os.environ.get("FUNC_REGION") }) logger = log_client.logger(log_name.format(os.environ.get("PROJECT_ID"))) db = sqlalchemy.create_engine( sqlalchemy.engine.url.URL( drivername="mysql+pymysql", username=os.environ.get("DB_USER"), password=os.environ.get("DB_PASS"), host=os.environ.get("DB_HOST"), port=3306, database=PRIMARY_TABLE_NAME ), pool_size=5, max_overflow=2, pool_timeout=30, pool_recycle=1800 ) start_time = perf_counter() check_if_table_exists(db) for i in range(START_IDX, END_IDX): print(i) logger.log_text(f"Checking class with id {i}", resource=res, severity="INFO") ... logger.log_text(f"Total seconds elapsed: {perf_counter() - start_time}", resource=res, severity="INFO") if __name__ == '__main__': main('data', 'context')
当我在本地运行上述云函数,并配置了我的
GOOGLE_APPLICATION_CREDENTIALS
并设置了本地Cloud MySQL代理时,将进行详细的云日志记录,并且该函数将顺利完成,完全符合我的期望:
但是,当我将整个组件部署到GCP并尝试通过控制台触发它(云消息传递触发器)时,我得到的只是日志记录:
实际文本
{ insertId: "******" labels: { execution_id: "******" } logName: "projects/******/logs/cloudfunctions.googleapis.com%2Fcloud-functions" receiveTimestamp: "2020-05-29T22:11:13.435688367Z" resource: { labels: { function_name: "******" project_id: "******" region: "us-central1" } type: "cloud_function" } severity: "DEBUG" textPayload: "Function execution started" timestamp: "2020-05-29T22:11:03.069889708Z" trace: "projects/******/traces/******" } { insertId: "******" labels: { execution_id: "******" } logName: "projects/******/logs/cloudfunctions.googleapis.com%2Fcloud-functions" receiveTimestamp: "2020-05-29T22:11:16.331311285Z" resource: { labels: { function_name: "******" project_id: "******" region: "us-central1" } type: "cloud_function" } severity: "DEBUG" textPayload: "Function execution took 12362 ms, finished with status: 'crash'" timestamp: "2020-05-29T22:11:15.430033249Z" trace: "projects/******/traces/******" }
*我真的不知道什么是敏感信息,什么不是,所以我只是给一些随机的东西加注了星标
在写这篇文章时,我意识到更多的日志记录可能会有所帮助,因此我将Google记录器卡在了记录器设置,数据库设置和运行的表检查之间。
该功能在安装Google记录器之前就崩溃了。
因此,我目前还不确定是否会破坏我的功能,并且我不知道如何找出原因,因为Google Cloud日志记录没有帮助。错误json具有trace
属性,看起来确实很有希望,因为此时我需要的只是Python堆栈跟踪,但我不知道是否有办法看到它。
我应该注意,我已经通过GCP的Cloud Function控制台配置了环境变量。
原则上,有两件事会有所帮助:
这里是我的代码的超级缩写版本(我将在注释中放置指向所有内容的链接)import ... ... def main(数据,上下文):log_client = logging.Client()log_name ='cloudfunctions。 ...