当我从我的Django应用程序中“打印”它们时会发生什么事情?

时间:2010-07-05 21:42:55

标签: python django

我在Linux服务器上有一个Django应用程序。在其中一个视图中,执行某种形式的print命令,并打印一些字符串。如何找出打印的字符串是什么?是否有一些记录保存这些东西?

5 个答案:

答案 0 :(得分:4)

输出应该在django启动的终端中。 (如果你没有直接启动它,我认为没有办法阅读它)

正如链接指出的那样,最好不要使用print,因为这会导致异常!但这不是唯一的原因:为此目的制作了模块(如logging),并且它们有更多的选择。

This site(即使是从2008年开始)确认我的陈述:

  

如果您想知道视图内部发生了什么,最快捷的方法是删除打印语句。 开发服务器直接向终端输出任何打印语句;它是JavaScript警报()的服务器端替代品。

     

如果您希望对日志记录有点更复杂,那么值得转向Python的日志记录模块(标准库的一部分)。您可以在settings.py中配置它:在这里他描述,做什么(在网站上查看)

出于调试目的,您还可以启用debug-mode或使用django-debug-toolbar

希望它有所帮助! :)

答案 1 :(得分:3)

永远不要使用 print ,因为一旦部署,它将打印到stdout并且WGSI将会中断。

使用记录。出于开发目的,非常容易设置。在你的项目上__init __。py:

import logging
from django.conf import settings

fmt = getattr(settings, 'LOG_FORMAT', None)
lvl = getattr(settings, 'LOG_LEVEL', logging.DEBUG)

logging.basicConfig(format=fmt, level=lvl)
logging.debug("Logging started on %s for %s" % (logging.root.name, logging.getLevelName(lvl)))

现在您记录的所有内容都会转到stderr,在本例中是您的终端。

logging.debug("Oh hai!")

另外,您可以使用LOG_LEVEL设置控制 settings.py 的详细程度。

答案 2 :(得分:1)

打印显示“./manage.py runserver”或其他变体很好 - 就像Joschua提到的那样,它显示在你启动它的终端中。如果你是从cron或者其他人那里运行FCGI,那么它就会陷入虚无,你会完全失去它。

对于我想要“打印”的地方,如警告或通知出来,我使用python的记录器实例推送到syslog以捕获输出并将其放在某处。我实例化了一个在加载模块时登录其中一个模块的实例 - models.py就是我选择的地方,只是为了方便起见,我知道它会在请求进入之前得到评估。

import logging, logging.handlers

logger = logging.getLogger("djangosyslog")
hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON)
formatter = logging.Formatter('%(filename)s: %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)

然后,当您想要在视图或其他内容中向记录器调用消息时:

logger = logging.getLogger("djangosyslog")
logging.warning("Protocol problem: %s", "connection reset", extra=d)

有.error(),. critical()等等 - 请查看http://docs.python.org/library/logging.html了解详细信息。

如果您正在寻找调试信息,Rob Hudson的调试工具栏非常棒 - 我自己经常在开发中使用它。它为您提供有关当前请求和响应的数据,包括用于生成任何给定页面的SQL。您可以通过推送来注入数据,就像打印一样 你对上下文/响应感兴趣的字符串 - 但我发现这有点难以处理。

答案 3 :(得分:0)

警告:如果您尝试使用WSGI下的print语句部署代码,那么事情就会破裂。请改用日志记录模块。

答案 4 :(得分:0)

如果您正在使用apache2服务器运行django应用程序并启用访问和错误日​​志,则您的打印语句将打印在错误日志中。

当您运行应用程序时,请以Linux中的root用户身份执行以下操作,

tail -f /path-to-error-file.log

大多数apache2日志将位于此位置/var/log/apache2/

只要在函数中找到打印命令,它就会打印。