要解决"AWS Lambda登录到CloudWatch组将日志事件记录两次"的问题,您可以使用以下代码示例来避免重复记录日志事件:
import logging
import json
import boto3
# 创建CloudWatch客户端
cloudwatch = boto3.client('cloudwatch')
# 创建logger实例
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
# 确保事件只记录一次
if 'logProcessed' not in event:
# 记录日志事件
logger.info('Logging event: {}'.format(json.dumps(event)))
# 将已处理标志添加到事件中
event['logProcessed'] = True
# 将事件发送到CloudWatch日志组
cloudwatch.put_log_events(
logGroupName='YourLogGroupName',
logStreamName='YourLogStreamName',
logEvents=[
{
'timestamp': int(round(time.time() * 1000)),
'message': json.dumps(event)
}
]
)
上述代码中,我们创建了一个CloudWatch客户端并设置日志记录级别为INFO。在lambda_handler函数中,我们首先检查事件中是否已经包含了logProcessed标志,以确保日志事件只被记录一次。然后,我们使用logger.info方法记录日志事件,并将logProcessed标志添加到事件中。最后,我们使用cloudwatch.put_log_events方法将事件发送到指定的CloudWatch日志组和日志流中。
请根据您的实际需求修改logGroupName和logStreamName参数,以及其他适用的代码部分。