Adi*_*ira 10 python logging python-2.7
我有一本字典:
d = {name : "John", age: 10}.
Run Code Online (Sandbox Code Playgroud)
并将日志文件设置为:
logging.basicConfig(level = logging.DEBUG, filename = "sample.log")
Run Code Online (Sandbox Code Playgroud)
是否可以将此字典记录到"sample.log"文件中?如果是,我该怎么办?
bak*_*kal 22
日志记录函数将转换'%s'为字符串表示形式(如果对象恰好是容器,repr()则将用于包含的对象)
import logging
logging.basicConfig(level=logging.DEBUG, filename='sample.log')
logging.debug('Sample dict log: %s', {'name' : "John", 'age': 10})
Run Code Online (Sandbox Code Playgroud)
它在日志文件中的显示方式:
DEBUG:root:Sample dict log: {'age': 10, 'name': 'John'}
Run Code Online (Sandbox Code Playgroud)
如果你有自定义对象(例如你自己的类的实例),你应该实现一个明智的__str__和/或__repr__它,并且上面的工作没有任何黑客.
有关这方面的更多信息Python中__str__和__repr__之间的区别
对于非JSON类的对象(对象实例,日期时间等),json.dumps()需要自定义序列化程序,例如datetime您获得的对象:
TypeError: datetime.datetime(...) is not JSON serializable
这适用于任何不受支持的类型 json.dumps()
而logging模块会找出对象的良好表示
您可以将其转换为字符串:
string_dictionary = str(d)
Run Code Online (Sandbox Code Playgroud)
然后将字符串字典变量记录到文件中
使用 JSON
import json
d = {"name":"John","age":10}
json_string = json.dumps(d)
Run Code Online (Sandbox Code Playgroud)
如果你想将字符串转换回来:
d = json.loads(json_string)
Run Code Online (Sandbox Code Playgroud)
简单就可以使用
dict_data = {"test":"data"}
logger.info("Loging dict ---> {0}".format(dict_data))
Run Code Online (Sandbox Code Playgroud)