agi*_*liq 43 python logging boto amazon-web-services
我正在使用Boto库与AWS交谈.我想禁用日志记录.(或重定向到/ dev/null或其他文件).我找不到明显的方法来做到这一点.我尝试过这个,但这似乎没有帮助.
import boto
boto.set_file_logger('boto', 'logs/boto.log')
Run Code Online (Sandbox Code Playgroud)
这说明有可能,http://developer.amazonwebservices.com/connect/thread.jspa? messageID = 52727췷 ,但AFAIK的文档并没有说明如何.
Vin*_*jip 76
你可以试试
import logging
logging.getLogger('boto').setLevel(logging.CRITICAL)
Run Code Online (Sandbox Code Playgroud)
这将抑制所有(CRITICAL除外)错误.
宝途使用日志配置文件(例如/etc/boto.cfg,~/.boto),所以看看你是否可以将其配置为您的需求的方式.
该set_file_logger调用只是将用户定义的文件添加到日志记录设置中,因此您无法使用该文件来关闭日志记录.
lon*_*ony 22
我将评论中的boto3答案(即charneykaye和gene_wood)转移到正确的答案:
import logging
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler()) # Writes to console
logger.setLevel(logging.DEBUG)
logging.getLogger('boto3').setLevel(logging.CRITICAL)
logging.getLogger('botocore').setLevel(logging.CRITICAL)
logging.getLogger('s3transfer').setLevel(logging.CRITICAL)
logging.getLogger('urllib3').setLevel(logging.CRITICAL)
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
Run Code Online (Sandbox Code Playgroud)
要获得所有记录器,请遵循leobarcellos的响应:
import logging
loggers_dict = logging.Logger.manager.loggerDict
Run Code Online (Sandbox Code Playgroud)
此答案适用于那些正在使用logging.config.dictConfig.
建议禁用来自所有外部包的 DEBUG 和 INFO 消息,不限于botocore和boto3:
LOGGING_CONFIG = { # Add your preexisting logging config here.
"loggers": { # Add your preexisting loggers here.
"": {"level": "WARNING", "handlers": ["console"], "propagate": False}, # Root logger.
}
Run Code Online (Sandbox Code Playgroud)
或者,要禁用来自所有外部包的调试消息,botocore但boto3不禁用来自所有外部包的调试消息:
LOGGING_CONFIG = { # Add your preexisting config here too.
"loggers": { # Add your preexisting loggers here too.
"botocore": {"level": "WARNING", "handlers": ["console"], "propagate": False},
"boto3": {"level": "WARNING", "handlers": ["console"], "propagate": False},
}
Run Code Online (Sandbox Code Playgroud)
假设您的日志记录配置字典名为LOGGING,接下来运行:
logging.config.dictConfig(LOGGING)
Run Code Online (Sandbox Code Playgroud)
以上必须在导入boto3之前运行,无论是直接导入还是间接导入!如果在 boto3 已经导入之后运行它就不会完全工作。您可以选择将"WARNING"上面替换为"INFO"或"ERROR"或"CRITICAL"。
这是唯一的解决方案,截至今天(2020/01/31)对我有用:
for name in ['boto', 'urllib3', 's3transfer', 'boto3', 'botocore', 'nose']:
logging.getLogger(name).setLevel(logging.CRITICAL)
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)
解决方案与
boto3.set_stream_logger('', logging.CRITICAL)
Run Code Online (Sandbox Code Playgroud)
正在杀死我的整个非 boto 日志。它从 python 操作标准日志记录的根记录器。
自己试试吧:
import logging
import boto3
import sys
logger = logging.getLogger(__name__)
boto3.set_stream_logger('', logging.CRITICAL)
logging.basicConfig(level=logging.DEBUG, stream=sys.stdout,
format='%(asctime)s - %(levelname)s - %(message)s')
if __name__ == '__main__':
s3_client = boto3.client('s3')
response = s3_client.list_buckets()
logger.info(f'bucket list: {response}')
Run Code Online (Sandbox Code Playgroud)
无论 initlogger发生在哪里,它都不会显示输出。去掉那一行,boto3.set_stream_logger('', logging.CRITICAL)非boto3的日志又会重新出现!因此,唯一可行的解决方案是不要boto3.set_stream_logger()按照我的建议使用该方法并应用它。
更好的是,禁用propagateboto:
import boto
boto.set_file_logger('boto', 'logs/boto.log')
logging.getLogger('boto').propagate = False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19807 次 |
| 最近记录: |