我在非Django应用程序中使用Django ORM,并希望打开DEBUG设置,以便我可以定期记录我的查询。所以我有一些模糊的东西:
from django.db import connection
def thread_main_loop():
while keep_going:
connection.queries[:] = []
do_something()
some_logging_function(connection.queries)
我想在我的生产服务器上执行此操作,但是文档警告,“记住,当打开DEBUG运行时,Django会记住它执行的每个SQL查询。这很有用。您正在调试,但在生产服务器上,它将快速消耗内存。“
因为每次通过每个线程的主循环清除connection.queries
列表,我相信Django查询日志记录不会导致我的应用程序消耗内存。它是否正确?如果我只使用Django ORM,还有其他原因不能在生产环境中打开DEBUG吗?
答案 0 :(得分:2)
在DEBUG
模式下,应用程序中的任何错误都将导致详细的Django堆栈跟踪。这在生产环境中是非常不受欢迎的,因为它可能会泄露攻击者可以对您的站点使用的敏感信息。即使您的应用程序看起来非常稳定,我也不会冒险。
我宁愿使用以某种方式将查询记录到文件的中间件。或直接统计数据库,例如(对于MySQL)。
watch -n 1 mysqladmin --user=<user> --password=<password> processlist
修改强>
如果您只使用Django ORM,那么afaik只有两件事情会有所不同: