函数计算,请问一下python custom runtime 如何配置 logging,解决并发大于 1 时,通过RequestId区分各并发请求的日志。
在函数计算中,可以通过配置Python自定义运行时(Custom Runtime)来实现对logging模块的配置,以及通过RequestId区分并发请求的日志。
以下是配置logging模块的步骤:
logging.json
的配置文件,例如:{
"version": 1,
"formatters": {
"default": {
"format": "%(asctime)s %(levelname)s %(name)s %(message)s"
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "default",
"stream": "ext://sys.stdout"
}
},
"root": {
"level": "INFO",
"handlers": ["console"]
}
}
bootstrap
文件中,添加以下代码来配置logging模块:import logging.config
import os
def init_logging():
logging_config_path = os.path.join(os.getcwd(), 'logging.json')
if os.path.exists(logging_config_path):
with open(logging_config_path, 'rt') as f:
config = json.load(f)
logging.config.dictConfig(config)
else:
logging.basicConfig(level=logging.INFO)
def handler(event, context):
init_logging()
# 处理函数的逻辑
通过以上步骤,你可以将自定义的logging配置文件应用到函数计算的Python自定义运行时中。
要实现通过RequestId区分并发请求的日志,可以使用Python的threading
模块来创建一个线程本地的变量来存储每个请求的RequestId。以下是一个示例:
import threading
request_id_local = threading.local()
def handler(event, context):
request_id_local.request_id = context.request_id
# 处理函数的逻辑
def log_message(message):
request_id = getattr(request_id_local, 'request_id', None)
if request_id:
message = f"[RequestId: {request_id}] {message}"
logging.info(message)
在函数计算中,每个请求都会触发一个新的执行环境,因此可以使用线程本地变量来存储每个请求的RequestId,并在日志中添加该信息。
Python custom runtime 中配置 logging,您需要执行以下步骤:
import logging
CopyCopy
logger = logging.getLogger()
CopyCopy
logger.setLevel(logging.DEBUG)
CopyCopy
console_handler = logging.StreamHandler()
CopyCopy
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
CopyCopy
logger.addHandler(console_handler)
CopyCopy
现在,您的 Python custom runtime 已经配置好了 logging。要解决并发大于 1 时,通过 RequestId 区分各并发请求的日志,您可以使用以下方法:
import uuid
request_id = str(uuid.uuid4())
CopyCopy
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(request_id)s - %(message)s')
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。