我在Linux服务器上有一个Django应用程序。在其中一个视图中,执行某种形式的print
命令,并打印一些字符串。如何找出打印的字符串是什么?是否有一些记录保存这些东西?
答案 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/
。
只要在函数中找到打印命令,它就会打印。