辞書があります:
d = {name : "John", age: 10}.
そして、次のように設定されたログファイル:
logging.basicConfig(level = logging.DEBUG, filename = "sample.log")
この辞書を「sample.log」ファイルに記録することは可能ですか?はいの場合、どうすればよいですか?
ロギング関数は、_'%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.dumps()
にはカスタムシリアライザーが必要です。取得するdatetime
オブジェクトを使用すると:
TypeError: datetime.datetime(...) is not JSON serializable
これは、json.dumps()
でサポートされていないすべてのタイプに当てはまります
一方、logging
モジュールはオブジェクトの適切な表現を理解します
シンプルに使える
dict_data = {"test":"data"}
logger.info("Loging dict ---> {0}".format(dict_data))
あなたはそれを文字列に変換することができます:
string_dictionary = str(d)
文字列ディクショナリ変数をファイルに記録します
jSONの使用
import json
d = {"name":"John","age":10}
json_string = json.dumps(d)
文字列を元に戻す場合:
d = json.loads(json_string)
CloudwatchのJSON行をログに記録したいときにこの質問に行きました。
私は python-json-logger
。
インストール:pip install python-json-logger
使用する pythonjsonlogger.jsonlogger.JsonFormatter
をフォーマッタクラスとして。