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