如何在Lambda函数中添加错误日志?并实现执行成功提示
问题解决方案
一、修正并优化后的代码
import logging import mariadb as mdb # 配置日志级别,确保INFO及以上级别日志能输出 logging.basicConfig(level=logging.INFO) def name_of_handler(event=None, context=None): cnxn = None cur = None try: # 将数据库连接移至handler内部,避免Lambda容器复用导致的连接失效问题 cnxn = mdb.connect( user="username", # 建议后续改为从环境变量获取,避免硬编码 password="pass", host="host", port=port, database="database" ) cur = cnxn.cursor() SQL_QUERY = "CALL STORED_PROCEDURE();" cur.execute(SQL_QUERY) cnxn.commit() # 添加执行成功的日志提示 logging.info("存储过程执行完成,记录已成功插入数据库") # 获取查询结果并返回(如果需要在Lambda响应中返回结果) row = cur.fetchone() logging.info(f"查询结果: {row}") return {"statusCode": 200, "message": "执行成功", "data": row} except mdb.Error as e: # 详细记录数据库错误,包括错误码和信息 logging.error(f"数据库执行错误 - 错误码: {e.args[0]}, 错误信息: {e.args[1]}") # 发生错误时回滚事务 if cnxn: cnxn.rollback() return {"statusCode": 500, "error": f"数据库错误: {e.args[1]}"} except Exception as e: # 记录通用异常的完整栈跟踪,便于排查问题 logging.exception("执行过程中发生未预期的异常") return {"statusCode": 500, "error": "未知异常"} finally: # 确保游标和连接无论成功失败都能关闭 if cur: cur.close() if cnxn: cnxn.close() # 本地测试时调用,部署到Lambda后无需此调用(Lambda会自动触发handler) if __name__ == "__main__": name_of_handler()
二、日志补充说明
- 数据库异常日志:针对
mdb.Error捕获数据库特定错误,记录错误码和详细信息,精准定位连接、SQL语法或权限类问题。 - 通用异常日志:使用
logging.exception自动记录异常的完整栈跟踪,比单纯打印错误信息更便于排查隐藏问题。 - 成功日志:在事务提交后添加INFO级别的成功提示,确认业务流程正常完成,同时记录查询结果,方便后续核对。
- 弃用
print输出日志:Lambda日志会统一收集到CloudWatch,logging模块能更好地适配日志级别和格式,便于后续筛选分析。
三、Lambda函数编写关键流程要点
- handler函数作为唯一入口:所有业务逻辑必须放在handler内部,禁止在handler外执行数据库连接、业务操作等代码——Lambda冷启动时会执行handler外的代码,但容器复用时可能导致连接失效、重复执行等问题。
- 资源生命周期管理:数据库连接、游标等资源要在handler内创建,并在
finally块中强制关闭,避免资源泄漏。 - 敏感信息不硬编码:数据库用户名、密码、主机地址等敏感信息,通过Lambda的环境变量配置,代码中用
os.environ.get("DB_USER")获取,提升安全性。 - 异常处理与事务回滚:数据库操作失败时必须回滚事务,避免产生脏数据;同时返回明确的错误响应,便于调用方处理。
- 返回规范响应:Lambda函数应返回包含
statusCode、message的标准JSON格式响应,适配API Gateway等服务的集成要求。 - 权限与网络配置:如果数据库在VPC内,需将Lambda配置到对应VPC的子网和安全组中,确保Lambda能访问数据库端口(默认3306);同时给Lambda配置对应的IAM权限。
- 本地测试:通过
if __name__ == "__main__"的方式在本地测试handler函数,模拟event参数验证逻辑,再部署到Lambda环境。
内容的提问来源于stack exchange,提问作者stackoverflowme
相关产品推荐
相关产品推荐

