如何在日志记录处理程序中指定str.format()样式?

时间:2014-01-16 11:14:27

标签: python logging string-formatting

在我的代码中,我在每个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='{')

1 个答案:

答案 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}