Python 为什么我会收到错误消息,我的自定义日志处理程序;没有“级别”属性;?

Python 为什么我会收到错误消息,我的自定义日志处理程序;没有“级别”属性;?,python,Python,我有以下处理程序: 导入日志 从peewee进口* db=SqliteDatabase(“my_app.db”) 类日志(模型): message=CharField() 类元: 数据库=db Log.create_表(db) 类DatabaseHandler(logging.Handler): def排放(自我,记录): 尝试: 事件=日志( message=record.message ) event.save() 除例外情况外: 自处理错误(记录) 当我这样做的时候: logger=l

我有以下处理程序:

导入日志
从peewee进口*
db=SqliteDatabase(“my_app.db”)
类日志(模型):
message=CharField()
类元:
数据库=db
Log.create_表(db)
类DatabaseHandler(logging.Handler):
def排放(自我,记录):
尝试:
事件=日志(
message=record.message
) 
event.save()
除例外情况外:
自处理错误(记录)
当我这样做的时候:

logger=logging.getLogger(\uuuuu name\uuuuu)
logger.setLevel(logging.DEBUG)
logger.addHandler(DatabaseHandler)
logger.info(“某物”)
我收到以下错误消息:

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'
回溯(最近一次呼叫最后一次):
文件“”,第6行,在
文件“/home/raf/miniconda3/lib/python3.7/logging/_init__.py”,第1383行,信息中
自我记录(信息、消息、参数、**kwargs)
文件“/home/raf/miniconda3/lib/python3.7/logging/_init__.py”,第1519行,在日志中
自我处理(记录)
文件“/home/raf/miniconda3/lib/python3.7/logging/_init__.py”,第1529行,在handle中
self.callHandlers(记录)
callHandlers中的文件“/home/raf/miniconda3/lib/python3.7/logging/_u init___;.py”,第1590行
如果record.levelno>=hdlr.level:
AttributeError:类型对象“DatabaseHandler”没有属性“level”
我只能在另一个地方()找到这个错误,它没有解决方案


这可能是因为我写的处理程序不正确,如果有人能帮助我,我将不胜感激

据我所知,您正在尝试在DatabaseHandler中继承Handler对象

官方文件指出: 请注意,处理程序从不直接实例化;此类充当更有用子类的基础。但是,子类中的init()方法需要调用处理程序。init()
据我所知,您应该初始化类中的处理程序。

据我所知,您正在尝试在DatabaseHandler中继承处理程序对象

官方文件指出: 请注意,处理程序从不直接实例化;此类充当更有用子类的基础。但是,子类中的init()方法需要调用处理程序。init()
据我所知,您应该初始化类中的处理程序。

正如@polar_bear所正确指出的,
DatabaseHandler
在传递给
addHandler
之前需要实例化。另一个问题是在应该访问
record.msg
()时访问
record.message

以下是更正后的代码:

导入日志
从peewee进口*
db=SqliteDatabase(“my_app.db”)
类日志(模型):
message=CharField()
类元:
数据库=db
Log.create_表(db)
类DatabaseHandler(logging.Handler):
def排放(自我,记录):
尝试:
事件=日志(
message=record.msg
) 
event.save()
除例外情况外:
自处理错误(记录)
dh=数据库处理程序()
logger=logging.getLogger(_名称__)
logger.setLevel(logging.DEBUG)
logger.addHandler(dh)
logger.info(“某物”)

正如@polar_bear正确指出的那样,
数据库处理程序
在传递到
addHandler
之前需要实例化。另一个问题是在应该访问
record.msg
()时访问
record.message

以下是更正后的代码:

导入日志
从peewee进口*
db=SqliteDatabase(“my_app.db”)
类日志(模型):
message=CharField()
类元:
数据库=db
Log.create_表(db)
类DatabaseHandler(logging.Handler):
def排放(自我,记录):
尝试:
事件=日志(
message=record.msg
) 
event.save()
除例外情况外:
自处理错误(记录)
dh=数据库处理程序()
logger=logging.getLogger(_名称__)
logger.setLevel(logging.DEBUG)
logger.addHandler(dh)
logger.info(“某物”)

你的意思是这样的吗?``类DatabaseHandler(logging.Handler):def_uuuinit_uuu(self,*args,**kwargs):super()但我还是收到了同样的错误信息。你是说这样的吗类DatabaseHandler(logging.Handler):def_uuuinit_uuu(self,*args,**kwargs):super()但我还是收到了同样的错误信息。太棒了!谢谢你知道我为什么要录制.msg吗?判断依据()
message
应该是日志记录的属性和
msg
参数。这是否意味着
record
在传递给
emit
函数时尚未实例化?这是一个很好的问题!Python源代码拯救:-)似乎在记录的格式化程序的
format()
方法调用-->中的记录上设置了
message
属性。因此:
msg
是“真实”的初始消息,而
message
是人类可读的消息表示形式,它确实得到了设置(在发出后的某个点)。这也是有意义的,因为
msg
是使用
args
进行格式化的--
消息是格式化的最终结果--)。。。这也意味着您可能想做
message=record.msg%record.args
:-)太棒了!谢谢你知道我为什么要录制.msg吗?判断依据()
message
应该是日志记录的属性和
msg
参数。这是否意味着
record
在传递给
emit
函数时尚未实例化?这是一个很好的问题!Python源代码拯救:-)似乎在记录的格式化程序的
format()
方法调用-->中的记录上设置了
message
属性。所以:
msg
是“真实”的初始消息,whi