记录数据,不仅仅是字符串(Python)

gue*_*tli -5 python logging

我想记录数据,而不仅仅是python中的字符串.

我想避免自己实现这个,因为我认为这是以前完成的.

我阅读了Logging HOWTO,但它没有涵盖这个主题

同样在这里:记录食谱

我想支持这些原始数据类型:

  • 字符串
  • 整数
  • 约会时间
  • 名单
  • 字典

记录后我想再次将日志解析回数据...

Gra*_*her 5

logging模块已经支持此功能,如您已链接到的文档中所述:

import logging
import datetime

if __name__ == "__main__":
    logging.basicConfig(level=logging.DEBUG)

    s = "test"
    i = 5
    today = datetime.datetime.today()
    l = [1, 2, 3, 4, "5"]
    d = {1:2, "a": 5}

    logging.debug(s)
    logging.info(i)
    logging.warning(today)
    logging.error(l)
    logging.fatal(d)
Run Code Online (Sandbox Code Playgroud)

输出:

DEBUG:root:test
INFO:root:5
WARNING:root:2018-03-29 11:54:14.408168
ERROR:root:[1, 2, 3, 4, '5']
CRITICAL:root:{1: 2, 'a': 5}
Run Code Online (Sandbox Code Playgroud)

如果需要混合字符串和对象,请使用格式化功能(%默认情况下使用格式设置):

logging.info("i = %s; s = %s", i, s)
# INFO:root:i = 5; s = test
Run Code Online (Sandbox Code Playgroud)

请注意,日志记录模块很聪明.如果你这样做logging.debug("%s" % , obj),该__str__方法obj将总是被调用,但如果你这样做要么logging.debug(obj)或者logging.debug("%s", obj),它只会如果日志记录级别设置为显示调试输出调用.这节省了一些时间,特别是如果这种方法很昂贵的话.