有没有人有工具可以检测参数数目无效的python logger语句?

有没有人有工具可以检测参数数目无效的python logger语句?,python,logging,Python,Logging,e、 g.如果您的代码库中有这样的代码: >>> import logging >>> logging.basicConfig() >>> logger = logging.getLogger(__name__) >>> logger.critical("foo: %s", 1, 2) Traceback (most recent call last): File "/pluto/local/lib/python2.6/

e、 g.如果您的代码库中有这样的代码:

>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger(__name__)
>>> logger.critical("foo: %s", 1, 2)
Traceback (most recent call last):
  File "/pluto/local/lib/python2.6/logging/__init__.py", line 768, in emit
    msg = self.format(record)
  File "/pluto/local/lib/python2.6/logging/__init__.py", line 648, in format
    return fmt.format(record)
  File "/pluto/local/lib/python2.6/logging/__init__.py", line 436, in format
    record.message = record.getMessage()
  File "/pluto/local/lib/python2.6/logging/__init__.py", line 306, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting
>>> 
…您将只获得堆栈跟踪,而不显示原始错误日志记录程序语句的位置

似乎编写一些使用tokenize模块或ast模块或其他东西来处理python源代码并检测这些问题并不难,但我无法想象我是第一个想要这样的东西的人


更新:我想象的更多的是一种静态分析类型的工具,而不是日志代码的更改或过程更改(例如代码审查)。我特别不认为代码审查是足够好的,因为人类永远不会犯错误。在我的例子中,我们已经有很多工具可以运行代码并捕获常见错误(例如,您在、pylint等中留下了一个pdb)。。。我真的希望向工具箱中添加工具。

一个解决方法是:

>>> import logging
>>> logging.basicConfig()
>>> logger = logging.getLogger(__name__)
>>> logger.critical("foo: %s" % (1, 2))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
导入日志记录 >>>logging.basicConfig()文件 >>>logger=logging.getLogger(_名称__) >>>logger.critical(“foo:%s”%(1,2)) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:在字符串格式化过程中并非所有参数都已转换 或者您想使用此特殊语法进行日志记录。如果,我问为什么


如果由于日志级别太低而导致消息被删除,我只能考虑保存评估步骤。

我制作了一个脚本来完成我需要的任务。它还不能处理很多边缘情况,但它完成了针对我的情况的工作(在我的草堆(82195行python代码)中找到了指针(6行错误的日志行)


Pylint具有检测日志记录的规则。严重(“foo:%s”%1)。它可能可以扩展到格式字符串中的帐户参数。审计和代码检查将是我的首选。让日志库进行格式化的目的是,如果您中断了某些内容(例如,在需要int的地方传递字符串,或传递错误的参数数,等等),日志子系统可以捕获并继续,而不会中断您的程序。