AWS Lambda Python3.9环境无法输出INFO级别日志的解决办法问询
AWS Lambda Python 3.9 配置INFO级别日志解决方案
配置不生效的核心原因
AWS Lambda Python 运行时会在加载用户代码前预先初始化 root 日志器并绑定默认 handler,而 logging.basicConfig() 仅在 root 日志器无已绑定 handler 时才会生效,因此你写的配置代码不会触发生效,并非 CloudWatch 覆盖了配置。
可用配置方案
方案1:直接修改 root 日志器配置(适用大多数场景)
直接修改运行时预创建的 root 日志器参数即可,无需重新初始化:
import logging # 获取 root 日志器实例 logger = logging.getLogger() # 设置日志级别为INFO logger.setLevel(logging.INFO) # 若需要自定义日志输出格式,新增以下代码即可 for handler in logger.handlers: handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
配置完成后直接用 logging.info("日志内容") 或者 logger.info("日志内容") 输出的日志都会正常上报到 CloudWatch。
方案2:创建独立自定义日志器(避免修改全局配置)
如果不想改动全局 root 日志器的默认行为,可以创建独立的日志器实例使用:
import logging # 创建独立日志器,名称可自定义 custom_logger = logging.getLogger("my_lambda_logger") custom_logger.setLevel(logging.INFO) # 关闭日志向上传播到root日志器,避免重复输出 custom_logger.propagate = False # 配置输出格式和handler log_handler = logging.StreamHandler() log_handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) custom_logger.addHandler(log_handler)
使用时调用 custom_logger.info("日志内容") 输出即可。
注意事项
- 不要在 Lambda 代码中使用
logging.basicConfig()做日志初始化,该操作在 Lambda 运行时环境下不会生效 - 若配置后仍看不到INFO级别日志,可检查Lambda函数的环境变量配置,确认没有设置
LOG_LEVEL之类的自定义参数覆盖日志级别
内容的提问来源于stack exchange,提问作者David Chidester
相关产品推荐
相关产品推荐

