python:如何在需要时启动和停止记录器

2024-02-09

我正在尝试在 Django 应用程序的代码中记录 sql 语句

目前我在 settings.py 中使用以下记录器配置

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'sql': {
            '()': SQLFormatter,
            'format': '[%(duration).3f] %(statement)s',
        },
        'verbose': {
            'format': '%(levelname)s %(funcName)s() %(pathname)s[:%(lineno)s] %(name)s \n%(message)s'
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'formatter': 'verbose',
            'class': 'logging.StreamHandler',
        },
        'sql': {
            'class': 'logging.StreamHandler',
            'formatter': 'sql',
            'level': 'DEBUG',
        }
    }
}

一般来说,要在 django 中记录 sql,我们可以添加django.db.backends到settings.py中的logger.config

 'loggers': {
    'django.db.backends': {
        'handlers': ['sql'],
        'level': 'DEBUG',
        'propagate': False,
    },

但问题是它会记录每条sql语句。那么我们如何开始和停止记录django.db.backends在代码之间。

我的views.py中有以下代码

def someview(request)
    # start logging from here
    user_set = User.objects.all()
    for user in user_set:
        print(user.last_name) 
    # stop logging from here

我也想用sql我在日志配置中定义的处理程序。

在上面的视图函数中,启动和停止记录的位置将包含哪些代码。


创建一个过滤器类并将实例添加到记录器或处理程序。

class LoggerGate:
    def __init__(self, state='open'):
        self.state = state

    def open(self):
        self.state = 'open'

    def close(self):
        self.state = 'closed'

    def filter(self, record):
        return self.state == 'open'

创建一个过滤器,初始化为“关闭”状态。 获取“django.db.backends”记录器并添加过滤器。

gate = LoggerGate('closed')
sql_logger = logging.getLogger('django.db.backends')
sql_logger.addFilter(gate)

然后致电open or close方法将日志记录限制到您想要的位置。

def someview(request)
    gate.open()      # start logging from here

    user_set = User.objects.all()
    for user in user_set:
        print(user.last_name) 

    gate.close()     # stop logging here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python:如何在需要时启动和停止记录器 的相关文章

随机推荐

  • 输入元素上的 Autocapitalize 属性(用于 iOS)会破坏验证

    可以看出here http www evotech net blog category html Safari 和 iPhone 版 Safari 支持所有 HTML 元素 包括已弃用的元素 甚至一些从未属于任何 W3C 规范的专有元素 它
  • 南非身份证号码验证并获取年龄和性别

    我对此进行了研究 但我使用的代码似乎都不起作用 南非身份证号码包含出生日期和性别 我想要的只是在输入字段中输入他们的 ID 号时提取该信息并验证它 最好是使用 jQuery 或 javascript 任何帮助表示赞赏 Dawid 您可以使用
  • 如何使用geom_vline和geom_histogram r ggplot2从填充比例图例中删除线条

    基本 使用R统计软件ggplot2 geom vline和geom histogram可视化一些数据 问题出在图例键上 我试图从一些随机模拟中绘制一对直方图 并在其之上绘制几条代表确定性模拟结果的线 我已经绘制了数据 但直方图的图例键中间有
  • 具有 AJAX 功能的 jQuery 循环插件

    我有一个页面 其中有多个图片滑块 例如 50 个滑块 每个滑块有 5 10 张图片 不幸的是 由于滑块数量巨大 页面加载速度非常慢 到目前为止 我一直在使用 Malsup 著名的 jQuery Cycle 插件 然而 这缺乏 AJAX 功能
  • 如何在 Visual Studio 2019 中将当前分支与另一个分支进行比较?

    在 Visual Studio 中 假设以下场景 从 master 创建一个分支 做一些改变 Commit 再次进行一些更改 Commit 当我们进行提交时 下面没有显示任何更改团队资源管理器 gt 更改 如果我们不执行第 5 步Chang
  • 为什么 AWS Lambda 无法到达 FunctionHandler?

    I am 首次将 C 应用程序部署到 Lambda 使用 Mac 因此无法使用 Visual StudioAWS 工具包扩展 https marketplace visualstudio com items itemName AmazonW
  • AngularJS 在表单输入上输入指令时不保存模型值

    我在页面上有以下内容 完整代码在此Plunker http plnkr co edit NZMC0Km3pFUBGXgcVopx p preview 有一个习俗onEnter当在聊天表单输入上按 Enter 键时调用函数的指令 下面的代码片
  • 使用 Websockets 代替 RESTful HTTP 有哪些陷阱?

    我目前正在开发一个项目 需要客户端请求一个大作业并将其发送到服务器 然后 服务器划分作业并以一组 url 进行响应 以便客户端进行 GET 调用并流回数据 我是该项目的新手 目前正在使用 Spring websockets 来提高效率 We
  • 如何让两个div并排对齐? [复制]

    这个问题在这里已经有答案了 我一直试图让两个 div 并排浮动 或者基本上是购物车和物品 即 jcart 和 cartbox 但似乎无法得到它 这是演示 link http asiraj com 我尝试改变float right 在购物车
  • C - 确定使用哪个分隔符 - strtok()

    假设我正在使用strtok 像这样 char token strtok input 有没有办法确定实际使用了哪个令牌 例如 如果输入类似于 Hello there How are you I m good End 我可以找出每个标记使用了哪
  • Angular 2 Setter 和 Getter

    我正在尝试创建一个服务来将数据解析到不同路线上的不同组件 如果我在同一组件上调用后续服务 我会得到所需的结果 但如果我尝试从另一个组件获取设置的结果 该服务将返回未定义的结果 这是我的服务 import Injectable from an
  • 位移位的目的是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在代码中遇到了以下几行 unsig
  • 如何在 Phonegap 3 上使用 plugin.xml 复制自定义 ios 框架

    我目前正在为phonegap 3 制作一个插件 我有一个自定义框架可以使用源文件指令进行复制 在plugin xml中我尝试过
  • 绑定与 SO_BINDTODEVICE 套接字

    我正在 linux ubuntu 13 10 上运行一个项目 它使用原始套接字连接到设备 这是我的代码 builed socket if sockfd socket PF PACKET SOCK RAW htons ETH P ALL 1
  • .Net框架4.0 SDK

    有谁知道是否有 Net 4 0 框架的 SDK 如果有 安装程序将其放在硬盘驱动器的哪个位置 我已经安装了 Visual Studio 2010 旗舰版 但在任何地方都找不到 SDK NET SDK 的最后一个独立版本是 2 0 之后它与W
  • 在线程中“浪费时间”最高效的 CPU 方式是什么?

    我有许多线程 100 个 每个线程一次执行几秒钟 当它们执行时 它们花费大量时间等待另一个系统 串行设备 的响应 我注意到 同时执行 100 个线程可能会占用大量资源 因此我实际上限制了可以同时启动的线程数量 但我想到 在线程内等待外部事件
  • 将功能附加到 Rails 3 中的按钮

    我的网页上显示一组按钮 单击其中一个按钮的效果需要是调用外部 API 可能会收到响应 并更新页面上的某些内容 一些附加信息 这些按钮部分地放置在页面上 并构成用户列表的一部分 这些按钮用于激活和停用列出的用户 我不确定这个设置是否会影响做我
  • when/2 和 ground/1 的逻辑纯度

    问题 我有一个关于逻辑纯度的问题 这个程序纯粹吗 when ground X X gt 2 有关上下文的一些 ir 相关细节 我正在尝试编写具有良好终止属性的纯谓词 例如 我想写一个谓词list length 2描述列表与其长度之间的关系
  • Angular 1.5 组件绑定:检查回调是否存在

    我有一个简单的contactList组件 有 2 个绑定 contacts and onRemove contacts只是要显示的联系人数组 onRemove是一个回调函数 app component contactList templat
  • python:如何在需要时启动和停止记录器

    我正在尝试在 Django 应用程序的代码中记录 sql 语句 目前我在 settings py 中使用以下记录器配置 LOGGING version 1 disable existing loggers False formatters