python - 扩展python日志处理程序,得到 "Level not an integer or a valid string"

标签 python django logging extend

我正在尝试创建自己的日志处理程序,它扩展了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()

这是日志配置:

'search_log':{
    'level': 'INFO',
    'class': 'logger.handlers.DBHandler',
    'model': 'logger.models.SearchLog',
    'formatter': 'verbose',
     }

但是我收到以下错误,请参阅堆栈跟踪:

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>

我一直在查看 python 日志记录源代码,但无法弄清楚我做错了什么

最佳答案

问题出在这一行:

super(DBHandler, self).__init__(self)

如果您以这种方式使用super,则不应传递self。您有效地传入 self 两次,并且 logging 模块尝试将第二个 self 解释为日志记录级别。

关于python - 扩展python日志处理程序,得到 "Level not an integer or a valid string",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12452671/

相关文章:

python - 在 Pandas/Numpy 中,如何使用 2 个不同的列在每个 block 内实现滚动功能?

python - 如何为 Python Pyramid Waitress 服务器设置日志记录?

java - 如何使 Websphere App 将每个应用程序日志条目重定向到不同的文件?

asp.net - 通过 smtppickupfolder 使用 MS 企业库日志记录应用程序 block 发送电子邮件?

python - 当 allure-results 有多个结果文件夹时,Allure-report 为空

python - 创建字节范围(用于请求部分数据)

python - 在 Keras/TensorFlow 中使用纯 numpy 指标作为指标

javascript - 关于 django/javascript 模式以及如何最好地组织/封装的一般查询

python - 根据外键对django对象进行分组

django - 内存数据库性能问题中的 PostgreSQL