代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

当我从我的django应用程序打印出它们时,事情会走向何方?

  •  6
  • Ram Rachum  · 技术社区  · 14 年前

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

    4 回复  |  直到 14 年前
        1
  •  4
  •   Joschua    14 年前

    输出应该在Django启动的终端中。(如果你不直接开始,我不相信有什么方法可以读到)

    正如LinkedLinked指出的,最好不要使用 print ,因为这会导致异常!但这并不是唯一的原因:有模块(比如 logging )为了这样的目的而制造,他们有更多的选择。

    This site (即使是从2008年起)确认我的声明:

    如果你想知道视图中发生了什么,最快的方法就是输入一个打印语句。这个 开发服务器 将任何打印语句直接输出到终端;它是JavaScript Alert()的服务器端替代方案。

    如果你想做一点 更复杂 有了日志记录,就值得转向Python的日志记录模块(标准库的一部分)。您可以在settings.py中配置它: 在这里,他描述了要做什么(在现场查看)

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

    希望它有帮助!:)

        2
  •  3
  •   hcalves    14 年前

    从不使用 打印 一旦部署,它将打印到stdout,wgsi将中断。

    使用 登录中 . 出于开发目的,非常容易设置。在您的项目上uuu init_uuuuuy:

    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!")
    

    另外,你可以控制你的 设置Py 日志级别设置。

        3
  •  1
  •   Dennis Williamson    14 年前

    打印结果可以通过“./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 了解细节。

    RobHudson的调试工具栏非常好,如果您要查找调试信息,我会经常在开发中使用它。它提供有关当前请求和响应的数据,包括用于生成任何给定页的SQL。你可以像打印一样将 你对上下文/响应感兴趣的字符串-但我发现这有点难处理。

        4
  •  0
  •   Matthew Schinckel    14 年前

    警告:如果您试图在wsgi下使用print语句部署代码,则会出现问题。而是使用日志模块。