Python 当我‘;打印’;从我的Django应用程序中删除它们?

Python 当我‘;打印’;从我的Django应用程序中删除它们?,python,django,Python,Django,我在Linux服务器上有一个Django应用程序。在其中一个视图中,执行某种形式的print命令,并打印一些字符串。我怎样才能知道打印的字符串是什么?有保存这些东西的日志吗?输出应该在django启动的终端。(如果你不是直接开始的,我不相信有办法阅读) 正如LinkedLink指出的,最好不要使用打印,因为这可能会导致异常!但这并不是唯一的原因:有一些模块(比如)是为这样的目的而设计的,它们有更多的选择 (即使是从2008年开始)确认我的陈述: 如果您想知道视图中发生了什么,最快的方法是插入一条

我在Linux服务器上有一个Django应用程序。在其中一个视图中,执行某种形式的
print
命令,并打印一些字符串。我怎样才能知道打印的字符串是什么?有保存这些东西的日志吗?

输出应该在django启动的终端。(如果你不是直接开始的,我不相信有办法阅读)

正如LinkedLink指出的,最好不要使用
打印
,因为这可能会导致异常!但这并不是唯一的原因:有一些模块(比如)是为这样的目的而设计的,它们有更多的选择

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

如果您想知道视图中发生了什么,最快的方法是插入一条print语句。开发服务器直接向终端输出任何打印语句;它是JavaScript警报()的服务器端替代方案

如果您想在日志记录方面变得更加复杂,那么值得使用Python的日志记录模块(标准库的一部分)。你可以在你的设置中配置它。py:他在这里描述了该做什么(查看网站)

出于调试目的,还可以启用或使用


希望有帮助!:)

打印在“/manage.py runserver”或其他变体中显示得很好-就像Joschua提到的,它显示在启动它的终端中。如果您是从cron之类的平台上运行FCGI,那么它就会被抛入虚无,而您将完全失去它

对于我希望“打印”出来的地方,比如警告或通知,我使用了一个python的logger实例,它推送到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()等-请查看详细的细节

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

警告:如果您试图在WSGI下使用print语句部署代码,可能会出现问题。改用日志模块。

切勿使用打印,因为一旦部署,它将打印到标准输出,WGSI将中断

使用日志记录。出于开发目的,设置起来非常简单。在您的项目_uinit__u; 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!")

此外,您还可以通过日志级别设置控制settings.py上的详细信息。

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

在运行应用程序时,请以linux中的
root
user的身份执行以下操作:

tail -f /path-to-error-file.log
大部分apache2日志将位于此位置
/var/log/apache2/


它将在您的函数中找到打印命令时进行打印。

这是正确的。另外,如果您使用apache为文件提供服务器,我知道mod_wsgi会在每次点击“print”语句时抛出一个不可恢复的错误;e、 g.如果你在你的应用程序中打印“Job finished OK!”,当你将脚本放到Apache上时,你的脚本将在这一行消失(未捕获的异常)。出于这个原因,我不惜一切代价避免在django应用程序中使用Print。@LinkedLink:仅当您不使用适当的配置指令时。