Reputation: 26568
I am trying to create my own log handler, which extends logging.Handler
import logging
from logging import Handler
class DBHandler(Handler,object):
model = None
def __init__(self, model):
super(DBHandler, self).__init__(self)
mod = __import__(model)
components = name.split('.')
for comp in components[1:]:
mod = getattr(mod, comp)
self.model = mod
def emit(self,record):
log_entry = self.model(level=record.levelname, message=record.msg)
log_entry.save()
and this is the log config:
'search_log':{
'level': 'INFO',
'class': 'logger.handlers.DBHandler',
'model': 'logger.models.SearchLog',
'formatter': 'verbose',
}
however I am getting the follow error, see stacktrace:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 252, in fetch_command
app_name = get_commands()[subcommand]
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 101, in get_commands
apps = settings.INSTALLED_APPS
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
self._setup()
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/home/james/virtualenv/hydrogen/local/lib/python2.7/site-packages/django/conf/__init__.py", line 135, in __init__
logging_config_func(self.LOGGING)
File "/usr/lib/python2.7/logging/config.py", line 777, in dictConfig
dictConfigClass(config).configure()
File "/usr/lib/python2.7/logging/config.py", line 575, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler 'search_log': Level not an integer or a valid string: <logger.handlers.DBHandler object at 0x2df1710>
I have been looking at the python logging source code and cannot figure out what I have done wrong
Upvotes: 1
Views: 9642
Reputation: 251
i solved the same problem with changing the level='Debug' to level=30 python 3.9.0
"Level not an integer or a valid string:'%r%' level
Upvotes: 0
Reputation: 11214
The problem is in this line:
super(DBHandler, self).__init__(self)
You should not be passing self
in if you use super
this way. You're passing in self
twice, effectively, and the logging
module is trying to interpret the 2nd self
as a logging level.
Upvotes: 3