代码之家  ›  专栏  ›  技术社区  ›  Rich

如何记录日志。是否与操作员一起调试?

  •  1
  • Rich  · 技术社区  · 6 年前

    我一直在尝试停止使用print语句进行调试,并开始使用日志记录。调试。我可以在打印中使用操作符,但日志记录似乎做不到这一点。

    例如,这很有效

    print('Is between now and then:    ', solar_noon < now < solarnoonplustimeunit )
    

    而这不是。

    logger.debug('Is between now and then:    ', solar_noon < now < solarnoonplustimeunit )
    

    后者说:

    Traceback (most recent call last):
      File "/usr/lib/python2.7/logging/__init__.py", line 859, in emit
        msg = self.format(record)
      File "/usr/lib/python2.7/logging/__init__.py", line 732, in format
        return fmt.format(record)
      File "/usr/lib/python2.7/logging/__init__.py", line 471, in format
        record.message = record.getMessage()
      File "/usr/lib/python2.7/logging/__init__.py", line 335, in getMessage
        msg = msg % self.args
    TypeError: not all arguments converted during string formatting
    

    如何使用日志进行操作员测试?

    1 回复  |  直到 6 年前
        1
  •  1
  •   xgord    6 年前

    日志模块方法要求第一个参数为格式字符串,以下参数属于该格式字符串: logger.debug(fmt_str, arg1,....) 。但您的字符串没有任何迹象表明后面还有更多元素。

    i、 e.记录器。debug func最终将尝试执行以下操作:

    fmt_str % (arg1, arg2, ...)
    


    尝试添加格式str %s :

    logger.debug('Is between now and then:    %s', solar_noon < now < solarnoonplustimeunit )
    


    编辑: 为什么原始字符串与 print :

    根据 docs :

    打印(*对象,sep=“”,end=“”\n,file=sys.stdout)

    将对象打印到流文件中,以sep分隔,后跟end。sep、end和file(如果存在)必须作为关键字参数提供。

    所有非关键字参数都转换为字符串,就像str()和 写入流,由sep分隔,后跟end。两个9月 和结束必须是字符串;它们也可以是None,这意味着使用 默认值。如果没有给定对象,print()将只写end。

    自默认值起 sep 是一个空格,python只是将字符串和bool值的字符串表示形式混合在一起,用空格分隔它们。