在 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 查询是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章