我有以下处理程序:
import logging
from peewee import *
db = SqliteDatabase("my_app.db")
class Log(Model):
message = CharField()
class Meta:
database = db
Log.create_table(db)
class DatabaseHandler(logging.Handler):
def emit(self, record):
try:
event = Log(
message=record.message
)
event.save()
except Exception:
self.handleError(record)
当我这样做的时候:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logger.addHandler(DatabaseHandler)
logger.info("something")
我收到以下错误消息:
Traceback (most recent call last):
File "<stdin>", line 6, in <module>
File "/home/raf/miniconda3/lib/python3.7/logging/__init__.py", line 1383, in info
self._log(INFO, msg, args, **kwargs)
File "/home/raf/miniconda3/lib/python3.7/logging/__init__.py", line 1519, in _log
self.handle(record)
File "/home/raf/miniconda3/lib/python3.7/logging/__init__.py", line 1529, in handle
self.callHandlers(record)
File "/home/raf/miniconda3/lib/python3.7/logging/__init__.py", line 1590, in callHandlers
if record.levelno >= hdlr.level:
AttributeError: type object 'DatabaseHandler' has no attribute 'level'
我只能在另一个地方(https://github.com/GNS3/gns3-gui/issues/2109)找到这个错误,它没有解决方案
这可能是因为我写的处理程序不正确,如果有人能帮助我,我将不胜感激
据我所知,您正在尝试在DatabaseHandler中继承Handler对象
官方文件指出: 请注意,处理程序从不直接实例化;此类充当更有用子类的基础。但是,子类中的init()方法需要调用处理程序。init() 据我所知,您应该初始化类中的处理程序
正如@polar_bear正确指出的那样,
DatabaseHandler
需要在传递给addHandler
之前进行实例化。另一个问题是当您应该访问record.msg
(someone found this here)时访问record.message
以下是更正后的代码:
相关问题 更多 >
编程相关推荐