【问题标题】:Where do prints go when running Flask with Apache?使用 Apache 运行 Flask 时打印在哪里?
【发布时间】:2015-10-12 02:34:01
【问题描述】:

我刚刚将我用 Flask 构建的第一个网站部署到了生产服务器。我使用logging.handlers.RotatingFileHandler/log/myapp.log 启用了日志记录,我可以使用它来记录消息,例如:

current_app.logger.error('this is a massive error')

这很好用。这让我对一些代码感到好奇,其中包含例如我在调试时使用的print 'some info here'。这些打印输出到哪里去了?进入虚空/dev/null 或其他地方?有没有可能以某种方式抓住它们?

欢迎所有提示!

【问题讨论】:

  • 服务器终端....你检查了吗?
  • @Ja8zyjits - 但是我使用sudo service apache2 start 启动apache,那么我应该在哪里找到服务器终端?
  • 你在使用 mod_wsgi 吗?还是uwsgi? Apache 本身不做 wsgi,这是烧瓶等 python Web 应用程序所需要的。
  • 我使用mod_wsgi,如果我使用uwsgi,我能捕捉到那个输出吗?

标签: python apache logging flask


【解决方案1】:

您使用print 输出的所有内容都会进入标准输出,即Unix 服务器上的/dev/stdout(默认情况下)。由于 apache 是作为服务运行的,你可能永远不会看到这些输出。

解决此问题的一种方法是将脚本的标准输出重定向到某些文件:

>>> import sys
>>> sys.stdout = open('output.logs', 'w')
>>> print('Hello World!') # Nothing appears bellow
>>> sys.stdout = sys.__stdout__ # Reset to the standard output
>>> open('output.logs', 'r').read()
'Hello World!\n'

【讨论】:

  • 但只有当应用程序结束和/或您重置输出流时输出才可见
【解决方案2】:

在 Apache 上运行的应用程序中的打印语句通常可以在 Apache 日志中看到。你可以查看这个文件:/var/log/apache2/other_vhosts_access.log

【讨论】:

  • 那个文件是空的.. :(
  • /var/log/apache2/access.log?怎么样
  • 无论我打印到 stdout 还是 stderr,我的打印语句都会发送到 apache error_log
猜你喜欢
  • 2016-01-27
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2012-11-05
相关资源
最近更新 更多