pee*_*eer 3 python logging amazon-s3 boto3 aws-lambda
我有一个列出存储桶的本地脚本:
import boto3
s3_client = boto3.client('s3')
for bucket in s3_client.list_buckets()["Buckets"]:
print(bucket['Name'])
Run Code Online (Sandbox Code Playgroud)
当我在本地执行它时,它就是这样做的。现在,如果我在 AWS 上以 lambda 形式执行此代码并将日志级别设置为DEBUG,如下所示:
import boto3
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
s3_client = boto3.client('s3', endpoint_url="http://localhost:4566")
def lambda_handler(event, context):
s3_client.list_buckets()
return { "statusCode": 200 }
Run Code Online (Sandbox Code Playgroud)
我获得了详细的日志,例如发送到 S3 的 HTTP 请求的标头。
但如果我将这些谎言添加到我的本地脚本中,则不会发生任何变化。我试过了:
import boto3
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
s3_client = boto3.client('s3')
for bucket in s3_client.list_buckets()["Buckets"]:
print(bucket['Name'])
Run Code Online (Sandbox Code Playgroud)
和
import boto3
import logging
logging.getLogger('boto3').setLevel(logging.DEBUG)
logging.getLogger('botocore').setLevel(logging.DEBUG)
logging.getLogger('s3transfer').setLevel(logging.DEBUG)
s3_client = boto3.client('s3')
for bucket in s3_client.list_buckets()["Buckets"]:
print(bucket['Name'])
Run Code Online (Sandbox Code Playgroud)
正如这里所建议的,在这两种情况下我都没有收到日志。我怎样才能让我的本地脚本显示 boto3 在后台所做的事情的日志?
这似乎对我有用:
import boto3
import logging
boto3.set_stream_logger('', logging.DEBUG)
s3_client = boto3.client('s3')
for bucket in s3_client.list_buckets()["Buckets"]:
print(bucket['Name'])
Run Code Online (Sandbox Code Playgroud)
喷出一大堆东西。 从这个文档