如何在本地脚本中从 boto3 获取调试日志?

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 在后台所做的事情的日志?

Dan*_*ell 5

这似乎对我有用:

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)

喷出一大堆东西。 从这个文档