web-dev-qa-db-ja.com

辞書をログファイルに記録するにはどうすればよいですか?

辞書があります:

 d = {name : "John", age: 10}. 

そして、次のように設定されたログファイル:

logging.basicConfig(level = logging.DEBUG, filename = "sample.log")

この辞書を「sample.log」ファイルに記録することは可能ですか?はいの場合、どうすればよいですか?

13
Adit Vira

機能するシンプルなソリューション

ロギング関数は、_'%s'_を文字列表現に変換します(オブジェクトがたまたまコンテナである場合、含まれているオブジェクトにはrepr()が使用されます)

_import logging
logging.basicConfig(level=logging.DEBUG, filename='sample.log')
logging.debug('Sample dict log: %s', {'name' : "John", 'age': 10})
_

ログファイルでの表示方法:

_DEBUG:root:Sample dict log: {'age': 10, 'name': 'John'}
_

カスタムオブジェクト(独自のクラスのインスタンスなど)がある場合は、適切な___str___または___repr___、あるいはその両方を実装する必要があります。

詳細はこちら Pythonでの__str__と__repr__の違い

JSONはこれにはあまり適していません

JSONに似ていないオブジェクト(オブジェクトインスタンス、日時など)の場合、json.dumps()にはカスタムシリアライザーが必要です。取得するdatetimeオブジェクトを使用すると:

TypeError: datetime.datetime(...) is not JSON serializable

これは、json.dumps()でサポートされていないすべてのタイプに当てはまります

一方、loggingモジュールはオブジェクトの適切な表現を理解します

22
bakkal

シンプルに使える

dict_data = {"test":"data"}
logger.info("Loging dict ---> {0}".format(dict_data))
4
Gaurav

あなたはそれを文字列に変換することができます:

string_dictionary = str(d)

文字列ディクショナリ変数をファイルに記録します

jSONの使用

import json

d = {"name":"John","age":10}
json_string = json.dumps(d)

文字列を元に戻す場合:

d = json.loads(json_string)
2
Amr Magdy

CloudwatchのJSON行をログに記録したいときにこの質問に行きました。

私は python-json-logger

インストール:pip install python-json-logger

使用する pythonjsonlogger.jsonlogger.JsonFormatterをフォーマッタクラスとして。

0
Martin Thoma