在Python运行环境中,如果使用print语句输出的日志没有显示,可能有以下几个原因:
日志被重定向:函数计算FC会收集标准输出(stdout)和标准错误(stderr)的日志,并将其发送到配置的日志服务。如果日志没有显示,可能是日志配置有问题,导致日志没有被正确收集。请检查服务的Logstore配置是否正确,确保日志服务已经启用。
日志级别不正确:在Python中使用logging模块时,日志级别默认是INFO。如果设置的日志级别高于INFO(例如WARNING、ERROR或CRITICAL),INFO级别的日志不会被打印。确保你的日志级别设置正确,例如:
import logging
logging.basicConfig(level=logging.INFO)
代码错误:确认print语句在正确的函数执行路径中,确保它在handler函数中被调用。如果print语句在其他地方,例如在初始化或错误处理代码块中,可能不会在预期的地方执行。
编码问题:确保你的输出内容是字符串,如果包含非ASCII字符,可能需要设置合适的编码,例如print(s.encode('utf-8'))。
使用context.getLogger():在函数计算FC中,推荐使用context.getLogger()来记录日志,因为它会自动收集并发送到日志服务。例如:
import logging
def handler(event, context):
logger = context.getLogger()
logger.info('Hello World')
使用context对象:如果函数并发度大于1,使用context.getLogger()来确保每个并发请求的日志不会混淆。例如:
def handler(event, context):
context.getLogger().info("Hello world")
检查调用日志:在函数计算控制台的调用日志页面,查看是否有日志输出,这可以帮助确认日志是否被收集。
网络问题:如果函数计算服务的网络配置有问题,可能导致日志无法发送到日志服务。
权限问题:检查函数计算的角色是否具有足够的权限访问日志服务。
配置问题:确保函数配置中的logConfig已经开启,允许收集日志。
函数执行超时:如果函数执行超时,日志可能没有完全发送到日志服务。此回答整理自钉群“阿里函数计算客户【已满,加2群:64970014484】”
函数往标准输出stdout打印的日志内容会被收集到创建服务时指定的Logstore中,您可以使用以下方式打印日志。
使用logging模块打印日志
使用此方法打印的每条日志中都包含时间、RequestId和日志级别等信息,RequestId方便您在出错时定位问题日志。代码示例如下所示。
import logging
def handler(event, context):
logger = logging.getLogger()
logger.info('hello world')
return 'done'
执行以上代码,输出的日志内容如下所示。
2017-07-05T05:13:35.920Z a72df088-f738-cee3-e0fe-323ad**e5 [INFO] hello world
使用print打印日志
使用该方法打印日志会将内容原样输出到日志中。代码示例如下所示。
def handler(event, context):
print ('hello world')
return 'done'
执行以上代码,输出的日志内容如下所示。
hello world
参考文档https://help.aliyun.com/zh/functioncompute/user-guide/logging-2?spm=a2c4g.11186623.0.i27
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。