Flask Python 日志记录:在文件中记录文件路径时出现类型错误

aji*_*are 2 python logging

我正在尝试将变量“log_location”的内容添加到当前记录器。

log_location = log_folder_location + os.path.sep + log_file_name
logger.debug("log location", str(log_location))
print "log_location: ",log_location
Run Code Online (Sandbox Code Playgroud)

这会打印到控制台,但在日志记录中出错,

Traceback (most recent call last):
  File "/usr/lib64/python2.6/logging/__init__.py", line 784, in emit
    msg = self.format(record)
  File "/usr/lib64/python2.6/logging/__init__.py", line 662, in format
    return fmt.format(record)
  File "/usr/lib64/python2.6/logging/__init__.py", line 444, in format
    record.message = record.getMessage()
  File "/usr/lib64/python2.6/logging/__init__.py", line 314, in getMessage
    msg = msg % self.args
TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

它打印到,

log_location:  /U01/Nova/Logs/DEV-INT/TEST/validation_20170203-164617-5.log
Run Code Online (Sandbox Code Playgroud)

当我尝试正常的 python 提示但在使用 Flask 时面临同样的问题时,不会发生此错误

我已经尝试将Python 标准输出记录到文件...使用活动标准输出(退格/更新) 和类型错误:并非所有参数都在字符串格式化 python 期间转换 ,这个也是Python:记录类型错误:并非所有参数都在字符串格式化期间转换

但不明白该怎么办。有人可以使用更简单的语言而不是文档来解释这一点吗?

Nik*_*yev 5

logger.debug()方法调用只使用一个参数。IE

logger.debug("log location: " + str(log_location))

关于自动格式化功能(我认为您不需要这个,但为了完整起见) - 让我们从文档中看:

Logger.debug(msg, *args, **kwargs)

在此记录器上记录级别为 DEBUG 的消息。msg 是消息格式字符串,args 是使用字符串格式化运算符合并到 msg 中的参数。(请注意,这意味着您可以在格式字符串中使用关键字以及单个字典参数。)

因此,当您在第一个参数中有格式模板时,多个参数很有用,例如

logger.debug('log location: %s', log_location)