在Django生产站点上启用DEBUG模式

0 投票
1 回答
2463 浏览
提问于 2025-04-15 20:01

我在一个非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 个回答

3

DEBUG模式下,你的应用程序出现任何错误都会显示详细的Django错误追踪信息。这在生产环境中是非常不好的,因为这可能会泄露敏感信息,攻击者可以利用这些信息来攻击你的网站。即使你的应用看起来很稳定,我也不建议冒这个险。

我更倾向于使用一种中间件,能够将查询记录到文件中。或者直接获取数据库的统计信息,比如(对于MySQL)。

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

补充:

如果你只使用Django的ORM,那么据我所知,只有两件事情会有所不同:

  • 查询会通过CursorDebugWrapper保存
  • 如果查询导致数据库警告,这将引发一个异常。

撰写回答