如何将字典记录到日志文件中?

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类的对象(对象实例,日期时间等),json.dumps()需要自定义序列化程序,例如datetime您获得的对象:

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

这适用于任何不受支持的类型 json.dumps()

logging模块会找出对象的良好表示


Amr*_*gdy 5

您可以将其转换为字符串:

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)


Gau*_*rav 5

简单就可以使用

dict_data = {"test":"data"}
logger.info("Loging dict ---> {0}".format(dict_data))
Run Code Online (Sandbox Code Playgroud)

  • 我不会这样做。在记录器中格式化内容是不好的做法,因为格式总是会被评估。如果您的字典很大并且您将 logLevel 设置为“ERROR”,则尽管没有在任何地方打印,但字典仍会转换为字符串。 (6认同)