在 django 生产中记录所有 sql 查询是个好主意吗?

Posted

技术标签:

【中文标题】在 django 生产中记录所有 sql 查询是个好主意吗?【英文标题】:Is it a good idea to log all sql queries in django production? 【发布时间】:2017-07-12 01:54:51 【问题描述】:

我正在考虑使用中间件记录对我们的 postgresql 数据库进行的所有 sql 查询 Snippet 1 要么 Snippet 2

它会影响应用程序的性能吗? Postgres 普通日志记录对我不起作用,因为除了 sql 查询我还必须存储一些额外的信息。

我尝试使用数据库日志记录所有 sql 查询,但遗憾的是,当设置文件中的 DEBUG=False 时,这似乎不起作用。

【问题讨论】:

我们不知道你的设置,所以我们不知道会发生什么。当然它不会加速应用程序。 ;-) @KrzysztofSzularz 但我想知道,这是个好主意吗?在 django 级别进行数据库日志记录?这是一个好习惯吗? 好的做法是不要将数据库查询存储在生产日志中。它可能导致凭据/敏感信息泄漏。 @KrzysztofSzularz 也是对的。它会减慢应用程序的速度。还会有不必要的日志,您可能会错过这些之间的重要日志 @ruddra 我没有告诉它会减慢应用程序的速度。我说它不会加快速度。 @ruddra 我也看不出在使用一些理智的日志聚合解决方案时如何错过“中间的日志”。 【参考方案1】:

您可以通过在 setting.py 中定义 Logging 来自定义日志记录 请阅读此文档。

可以在 debug=false 时使用此文档进行日志记录:

logging doc 将此代码添加到setting.py:

LOGGING = 
'version': 1,
'disable_existing_loggers': False,
'handlers': 
    'file': 
        'level': 'DEBUG',
        'class': 'logging.FileHandler',
        'filename': '/path/to/debug.log',
    ,

,
'loggers': 
    'django.db.backends': 
        'handlers': ['file'],
        'level': 'DEBUG',
    ,

在您在 sn-p2 上面放置的两个链接中说它仅在 debug=true 时才有效 在第 35 行的 sn-p1 中有这样的条件:

if len(connection.queries) > 0 and settings.DEBUG:
    ....

表明它在 debug=true 中有效

希望对你有帮助。

【讨论】:

以上是关于在 django 生产中记录所有 sql 查询是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

在生产中记录 SQL 查询?

用于慢速 SQL 查询的 Django 日志过滤器

如何使用SqlServer查询数据库表所有或指定记录

禁用“记住每个 SQL 查询”(Django)

常用SQL

django怎么判断数据库的记录是不是存在