AWSとの対話にBotoライブラリーを使用しています。ロギングを無効にしたい。 (または/ dev/nullまたはその他のファイルにリダイレクトします)。これを行う明確な方法が見つかりません。私はこれを試しましたが、それは役に立たないようです。
import boto
boto.set_file_logger('boto', 'logs/boto.log')
これはそれが可能であると言います http://developer.amazonwebservices.com/connect/thread.jspa?messageID=52727췷 しかし、ドキュメントにはその方法が記載されていません。
あなたは試すことができます
import logging
logging.getLogger('boto').setLevel(logging.CRITICAL)
すべての(クリティカル以外の)エラーを抑制します。
Botoはロギング構成ファイルを使用します(例:/etc/boto.cfg
、~/.boto
)それで、ニーズに合わせて構成できるかどうか確認してください。
set_file_logger
呼び出しは、ユーザー定義ファイルをログ設定に追加するだけなので、ログをオフにするためにそれを使用することはできません。
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)
すべてのロガーを取得するには、 leobarcellosからの応答 に従います。
import logging
loggers_dict = logging.Logger.manager.loggerDict
さらに良いことに、botoのpropagate
を無効にします。
import boto
boto.set_file_logger('boto', 'logs/boto.log')
logging.getLogger('boto').propagate = False
これが唯一の解決策であり、今日(2020/01/31)の時点で私には有効です。
_for name in ['boto', 'urllib3', 's3transfer', 'boto3', 'botocore', 'nose']:
logging.getLogger(name).setLevel(logging.CRITICAL)
logger = logging.getLogger(__name__)
_
ソリューション
_boto3.set_stream_logger('', logging.CRITICAL)
_
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}')
_
logger
の初期化が発生する場所に関係なく、出力は表示されません。 boto3.set_stream_logger('', logging.CRITICAL)
の行を削除すると、非boto3ログが再び表示されます。その結果、唯一の実用的な解決策は[〜#〜] not [〜#〜]であり、boto3.set_stream_logger()
でアプローチを使用して、提案したように適用します。
UPDATE 09/02/2020:
このソリューションは非botoログも無効にすることに注意してください。代わりに mchlfchr's answer を参照してください。
私にとって、残念なことに投稿された解決策はどれも機能しませんでした。おそらくboto自体の変更が原因です。
import logging
import boto3
boto3.set_stream_logger('', logging.CRITICAL)