自定义 python 数据库记录器,具有循环导入

2023-12-12

我正在尝试创建自己的日志处理程序来记录到数据库模型,它扩展了logging.Handler

import logging
from logging import Handler
from logger.models import SearchLog

class DBHandler(Handler,object):
    model = None
    def __init__(self, model):
        super(DBHandler, self).__init__()
        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()

这是日志配置:

'db_search_log':{
    'level': 'INFO',
    'class': 'db_logger.handlers.DBHandler',
    'model': 'db_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 'db_search_log': Unable to configure handler 'db_search_log': 'module' object has no attribute 'handlers'

db_logger/                                                                                                                                                                                                
    __init__.py                
    __init__.pyc
    handlers.py
    handlers.pyc
    log_handlers.pyc
    models.py
    models.pyc
    router.py
    router.pyc
    tests.py
    views.py

感谢 @istruble 指出这是由于设置的循环导入造成的,我怎样才能避免它并仍然记录到数据库模型?


我刚刚想出了另一种更规范的方法来使用延迟导入来实现它,我最初的问题是尝试将模型导入到内部init功能:

from logging import Handler

class DBHandler(Handler,object):
    model_name = None

    def __init__(self, model=""):
        super(DBHandler,self).__init__()
        self.model_name = model

    def emit(self,record):
        # instantiate the model
        try:
            model = self.get_model(self.model_name)
        except:
            from logger.models import GeneralLog as model

        log_entry = model(level=record.levelname, message=self.format(record))


        log_entry.save()

    def get_model(self, name):
        names = name.split('.')
        mod = __import__('.'.join(names[:-1]), fromlist=names[-1:])
        return getattr(mod, names[-1])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义 python 数据库记录器,具有循环导入 的相关文章

  • 更改随机森林分类器的阈值

    我需要开发一个没有 或接近没有 假阴性值的模型 为此 我绘制了召回率 精度曲线 并确定阈值应设置为 0 11 我的问题是 如何定义模型训练时的阈值 稍后在评估时定义它是没有意义的 因为它不会反映新数据 X train X test y tr
  • 在Python中不断寻找用户输入

    我将如何编写一个始终寻找用户输入的 Python 程序 我想我希望有一个等于输入的变量 然后根据该变量的等于值会发生不同的情况 因此 如果变量是 w 那么它将执行某个命令并继续执行 直到收到另一个输入 例如 d 然后会发生不同的情况 但直到
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • Seaborn regplot 中点和线的不同颜色

    中列出的所有示例西伯恩的regplot文档 https seaborn pydata org generated seaborn regplot html点和回归线显示相同的颜色 改变color争论改变了两者 如何为点设置与线不同的颜色 你
  • 无法使用 Python 循环分页 API 响应

    所以 我对这个感到摸不着头脑 使用 HubSpot 的 API 我需要获取我客户的 门户 帐户 中所有公司的列表 遗憾的是 标准 API 调用一次只能返回 100 家公司 当它返回响应时 它包含两个参数 使分页响应成为可能 其中之一是 ha
  • 将相同的 Patch 实例添加到 matplotlib 中的多个子图中

    我正在尝试将补丁的相同实例添加到 matplotlib 中的多个轴 这是最小的例子 import matplotlib pyplot as mpl plt import matplotlib patches as mpl patches f
  • 如何在每次运行 python 程序时添加新列

    我希望我的表的第一列作为卷号 第二列作为名称 每当我运行 python 程序时 我想在表中添加一列日期 在这个新列中 我想填充从 user list 获得的列表将包含值 P A P P 等 如何处理 我尝试首先通过 alter 命令添加一列
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • Python 可选参数对

    我正在使用argparse模块获取两个可选的命令行参数 parser add argument start date nargs metavar START DATE help start date in YYYY MM DD parser
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • python lxml 使用iterparse编辑并输出xml

    我已经在 lxml 库上摆弄了一段时间了 也许我没有正确理解它 或者我错过了一些东西 但我似乎无法弄清楚在捕获某个 xpath 后如何编辑文件并且然后能够在逐个元素解析时将其写回到 xml 中 假设我们有这个 xml 作为示例
  • 在 Qt 5 中嵌入 Python

    我想将 Python 解释器嵌入到 Qt 5 应用程序中 我在 Qt 5 中有一个工作应用程序 但是当我把 include
  • 使用 Python 导入包含文本和数字数据的文件

    I have a txt file which has text data and numerical data The first two rows of the file have essential information in te
  • 在 Python 中将嵌套字典位置作为参数传递

    如果我有一个嵌套字典 我可以通过索引来获取键 如下所示 gt gt gt d a b c gt gt gt d a b c 我可以将该索引作为函数参数传递吗 def get nested value d path a b return d
  • Pandas 中的数据透视表小计

    我有以下数据 Employee Account Currency Amount Location Test 2 Basic USD 3000 Airport Test 2 Net USD 2000 Airport Test 1 Basic
  • 从 python 文件调用 Julia 函数

    我能够创建一个 docker 环境 然后按照这个线程我有一个用 Julia 编写的高性能函数 如何从 Python 中使用它 https stackoverflow com questions 64241264 i have a high
  • Django 按小时过滤

    我找到了那个链接 http code djangoproject com attachment ticket 8424 time filters diff http code djangoproject com attachment tic
  • 如何通过 Selenium 内部的文本查找按钮(Python)?

    我有以下三个按钮 我不知道如何获取其中的文本 例如异常值 我试过browser find element by link text Outliers click 但出现 无法找到元素 错误 我该怎么做 See find element by
  • gnuplot:第 1 行:无效命令

    stackoverflow 上可爱的人们大家好 我正在尝试使用 gnuplot 绘制数据 我首先阅读表格并提取我想要的数据 我将此数据写入 dat 文件 截至目前 我只是尝试通过命令行绘制它 但会添加必要的代码以在 python 脚本工作后
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu

随机推荐

  • 将 require 与相对路径结合使用

    我们对 Protractor 有一组相当大的端到端测试 我们遵循页面对象模式 这有助于我们保持测试的干净和模块化 我们还有一组辅助函数可以帮助我们遵循干原则 问题 单个规范可能需要多个页面对象和辅助模块 例如 use strict var
  • 如何从 Process.GetCurrentProcess().Threads 获取托管线程

    我可以从 Process GetCurrentProcess Threads 获取正在运行的线程列表 但我需要知道以 Thread Start 启动的线程的托管名称 但它不是 ProcessThread 对象的属性 有没有办法从 Proce
  • 为什么这段代码的JTextArea占据了整个JFrame?

    我希望框架的一部分包含 JTextArea 但它完全占据了 我无法在这里追踪错误 import java awt import javax swing public class EchoServer public static void m
  • 在空手道中从 JSON 响应中的数组获取最大值

    我有以下 Json 作为 API 调用的响应 location name London region City of London Greater London country United Kingdom lat 51 52 lon 0
  • contentEditable 元素中的拖放事件

    当将某些内容放入 contentEditable 元素中 拖动后 时会触发什么事件 我说的是普通的旧式拖放 而不是 HTML5 拖放 其中任何元素都可以拖动 用例很简单 页面上有一个 contentEditable div 用作编辑器 用户
  • Tensorflow 2.0 - AttributeError:模块“tensorflow”没有属性“Session”

    当我执行命令时sess tf Session 在 Tensorflow 2 0 环境中 我收到如下错误消息 Traceback most recent call last File
  • 使用 Turbo C++ 3.0 处理键盘中断

    我有一个项目 那是一个简单的游戏 落块 游戏区域被视为一个网格 其大小为 20x20 屏幕顶部会有掉落的方块 底部有一个英雄 他会射击方块 游戏的目标是在方块到达底线之前将其射出 他始终坚守在底线 每当用户按下键盘的空格键时 我都会生成一个
  • 将鼠标悬停在另一个元素上更改元素样式

    我有三个元素 我需要通过将鼠标悬停在其他两个元素上来更改一个元素的样式 html div class pagination span class step links if page obj has previous div class n
  • webkit 中忽略 document.open("text/plain") 格式(safari、chrome)

    我正在使用 document open text plain 和 document write 从 JavaScript 创建页面 要呈现的文本是多行制表符分隔的文本 在Chrome 13 0 782 220 m和Safari 5 0 5中
  • 查找字符串中反斜杠的出现次数

    如果我的字符串是 aud ios 我如何检查它是否存在 in it 我尝试使用preg match string 但它不起作用 实现这一目标的正确方法是什么 对于这样简单的事情 您不需要正则表达式 像这样的字符串函数strpos 应该足够了
  • 如何捕获完整的 tableView ios 屏幕截图

    我有一个有 30 行的 tableView 并且在 tableView 的顶部还有一个视图 不在 tableview 标题中 我想捕获屏幕的完整屏幕截图 包括视图和 tableview 的所有行 但我只能能够捕获表视图和视图的可见行 请帮助
  • 获取父目录的相对路径

    我有一个场景 我想获取返回特定父目录的路径 这是一个示例文件夹结构 something 是一个文件夹 index php components header php footer php pages somePage php somePag
  • 尝试在空对象引用上调用接口方法“int android.database.Cursor.getCount()”[重复]

    这个问题在这里已经有答案了 我确实有一个让我头疼的问题 我通过自定义内容提供程序将我的城市的一些图像存储在 sqlite 数据库中 但是 当我运行我的应用程序时 我得到一个空光标 Caused by java lang NullPointe
  • 从 Scala (shark-shell) 访问 Shark 表 (Hive)

    I have shark 0 8 0其运行于hive 0 9 0 我可以通过调用在 Hive 上进行编程shark 我创建了一些表并向它们加载了数据 现在 我尝试使用这些表访问数据Scala 我调用了Scala外壳使用shark shell
  • Android - adb tcpip 错误

    我想使用以下方式连接到 Android 设备adb通过网络 我熟悉如何使用 ADB over TCP 连接到 Android 与https developer android com guide topics usb index html并
  • MonoTouch MVVM与实例变量的交叉绑定

    这听起来可能真的很愚蠢 但我就是无法绑定到实例变量 字符串类型 来工作 在我视图的 xib 中 我创建一个文本字段作为 IB 中的出口 然后我可以将其绑定到我的 viewModel 的字符串属性 但是 它不允许我以相同的方式将视图的字符串变
  • C#中相对路径到绝对路径?

    我有 xml 文件 其中包含图像的 href 文件路径 例如 images image jpg href 包含相对路径 现在 我需要提取图像的 href 并将它们转换为文件系统中的绝对路径 我知道 GetFullPath 方法 但我尝试了它
  • Typescript 数组:使用混合类型推理

    打字稿版本 3 0 3 我正在为侧边栏导航菜单创建一个模型 项目可以是如下所述的两种类型之一 type SidebarItems Array
  • Delphi XE ISAPI WebBroker 文件上传

    我需要一些帮助来接受 Delphi XE2 中 ISAPI 上的文件上传 在 Delphi 2007 中 我使用 Shiv 的 TMsMultipartParser 它可以 100 工作 尝试在 XE2 中使用它确实有效 据我所知 内容长度
  • 自定义 python 数据库记录器,具有循环导入

    我正在尝试创建自己的日志处理程序来记录到数据库模型 它扩展了logging Handler import logging from logging import Handler from logger models import Searc