打开Django生产站点上的DEBUG

时间:2010-03-04 16:05:28

标签: python django debugging

我在非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吗?

1 个答案:

答案 0 :(得分:2)

DEBUG模式下,应用程序中的任何错误都将导致详细的Django堆栈跟踪。这在生产环境中是非常不受欢迎的,因为它可能会泄露攻击者可以对您的站点使用的敏感信息。即使您的应用程序看起来非常稳定,我也不会冒险。

我宁愿使用以某种方式将查询记录到文件的中间件。或直接统计数据库,例如(对于MySQL)。

watch -n 1 mysqladmin --user=<user> --password=<password> processlist

修改

如果您只使用Django ORM,那么afaik只有两件事情会有所不同:

  • 将使用CursorDebugWrapper
  • 保存查询
  • 如果查询导致数据库警告,则会引发异常。