在我的代码中,我在每个LogRecord
上编写dict-objects。其中一个键称为my_msg
,我想创建一个StreamHandler
,只打印出my_msg
键的时间和值。
我尝试过以下操作,但收到错误消息:AttributeError: type object 'LogRecord' has no attribute 'levelname'
streamformatter = logging.Formatter(fmt='{}:\t{}'.format(logging.LogRecord.levelname, logging.LogRecord.message.get('my_msg'), datefmt='%H:%M:%S', style='{')
答案 0 :(得分:3)
您需要将模板传递给Formatter()
类。然后,稍后将使用该模板来格式化您的消息。您还需要使用命名槽:
streamformatter = logging.Formatter(fmt='{levelname}:\t{my_msg}', datefmt='%H:%M:%S', style='{')
创建.format()
对象时,不要在其上调用Formatter()
;那时候还没有日志消息,也没有要填写的等级。
默认情况下,请参阅logrecord attributes section可用的名称;表格第二列中的任何%
- 样式格式都应转换为新式格式:
%(asctime)s
变为{asctime}
或{asctime!s}
%(created)f
变为{created:f}
%(lineno)d
变为{lineno:d}
。等