Gre*_*egT 3 python logging formatter attributeerror python-3.x
我正在尝试在Python 3.x中创建一个日志,该日志写到控制台。这是我的代码:
import logging
import sys
class Temp:
def __init__(self, is_verbose=False):
# configuring log
if (is_verbose):
self.log_level=logging.DEBUG
else:
self.log_level=logging.INFO
log_format = logging.Formatter('[%(asctime)s] [%(levelname)s] - %(message)s')
logging.basicConfig(level=self.log_level, format=log_format)
self.log = logging.getLogger(__name__)
# writing to stdout
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(self.log_level)
handler.setFormatter(log_format)
self.log.addHandler(handler)
# here
self.log.debug("test")
if __name__ == "__main__":
t = Temp(True)
Run Code Online (Sandbox Code Playgroud)
如果输入“ here”之后的行,Python会引发错误:
[2019-01-29 15:54:20,093] [DEBUG] - test
--- Logging error ---
Traceback (most recent call last):
File "C:\Programok\Python 36\lib\logging\__init__.py", line 993, in emit
msg = self.format(record)
File "C:\Programok\Python 36\lib\logging\__init__.py", line 839, in format
return fmt.format(record)
File "C:\Programok\Python 36\lib\logging\__init__.py", line 577, in format
if self.usesTime():
File "C:\Programok\Python 36\lib\logging\__init__.py", line 545, in usesTime
return self._style.usesTime()
File "C:\Programok\Python 36\lib\logging\__init__.py", line 388, in usesTime
return self._fmt.find(self.asctime_search) >= 0
AttributeError: 'Formatter' object has no attribute 'find'
...
Run Code Online (Sandbox Code Playgroud)
我的代码中还有其他一些地方可以打印到日志中,但是即使删除了“ here”之后的行,也不会将任何内容写入stdout。
可能是什么问题?
问题来自调用,basicConfig该调用为stderr设置了日志处理程序,并且还接受格式字符串,而不是格式程序。因为您稍后要自己进行这项工作,所以不需要使用该basicConfig功能。可以在python文档中找到更多信息。
删除对的呼叫basicConfig并添加self.log.setLevel(self.log_level)可以解决您遇到的问题。
工作代码:
import logging
import sys
class Temp:
def __init__(self, is_verbose=False):
# configuring log
if (is_verbose):
self.log_level=logging.DEBUG
else:
self.log_level=logging.INFO
log_format = logging.Formatter('[%(asctime)s] [%(levelname)s] - %(message)s')
self.log = logging.getLogger(__name__)
self.log.setLevel(self.log_level)
# writing to stdout
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(self.log_level)
handler.setFormatter(log_format)
self.log.addHandler(handler)
# here
self.log.debug("test")
if __name__ == "__main__":
t = Temp(True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2465 次 |
| 最近记录: |