记录器表现不正常,抛出奇怪的错误

时间:2015-01-15 21:02:48

标签: python python-2.7 logging

我一直在尝试使用简单的记录器,但我无法确定这里出了什么问题:

dlogger = logging.getLogger('Logger')
dlogger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
    LOG_FILENAME, maxBytes=50000, backupCount=5)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
dlogger.addHandler(handler)

# ...

dlogger.info('%d successes. %d errors.', counter, error)

以上代码在运行时会产生此错误:

Traceback (most recent call last):
  File "/usr/lib/python2.7/logging/__init__.py", line 851, in emit
     msg = self.format(record)
 File "/usr/lib/python2.7/logging/__init__.py", line 724, in format
    return fmt.format(record)
  File "/usr/lib/python2.7/logging/__init__.py", line 467, in format
    s = self._fmt % record.__dict__
 ValueError: unsupported format character '(' (0x28) at index 3

同样的ValueError的其他任何问题似乎都没有解释我的情况。发生了什么事?!

不仅如此,而且在我运行具有此日志消息的脚本后,它会显示以下行为:

8 successes. 0 errors.
8 successes. 0 errors.
8 successes. 0 errors.
2015-01-15 16:30:07,539 - INFO - 8 successes. 0 errors.

记录器只能被触发一次,但由于某种原因,它会产生所有这些消息。

补充:即使我将消息简化为字符串(没有计入格式),它仍然会使用五到六个重复行来保存我的日志。

甚至后来添加:好的,我想我可以解释多个日志记录:我在调试时一直在重新加载模块,我认为它生成了多个记录器,即使我认为在重新加载期间我已经覆盖了前一个

1 个答案:

答案 0 :(得分:0)

看这里:https://docs.python.org/2/library/logging.html#logging.Logger.debug

我在这一行猜测你的一个变量:

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

是空的。这会使格式字符串变成这样:%()会产生你描述的错误。

尝试打印出这些变量