1

我想在生产金字塔Web 项目中临时打开调试消息,所以我调整了production.ini文件,将其推送到Heroku,只看到错误和警告级别的消息。

所以我想,这似乎很奇怪,因为如果我在本地 PC 上像下面这样启动金字塔应用程序,我会收到所有日志级别的消息。

env/bin/pserve production.ini

好的,所以这并不是它在 Heroku 上的运行方式,它实际上是从一些看起来像这样的 python运行的(在一个名为 的文件中runapp.py):

import os

from paste.deploy import loadapp
from waitress import serve

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app = loadapp('config:production.ini', relative_to='.')

    serve(app, host='0.0.0.0', port=port)

现在,可以肯定的是,如果我在本地 PC 上执行此操作,我会得到与部署到 Heroku 时相同的行为(不足为奇)。

 python runapp.py

我的问题是,我在这里缺少什么?为什么以第二种方式运行它会导致除 ERROR 和 WARN 之外的日志消息不会输出到标准输出?当然,既然它使用的是同一个production.ini文件,它应该像我使用这个pserve过程一样工作吗?

这是我的日志记录部分production.ini

###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
###

[loggers]
keys = root, test

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = DEBUG
handlers = console

[logger_test]
level = DEBUG
handlers = console
qualname = test

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = DEBUG
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
4

1 回答 1

4

PasteDeploy 实际上并不承担配置日志记录的责任。这是 INI 文件具有双重用途的一个小怪癖。PasteDeploy 关心的部分和logging.config.fileConfig关心的部分都必须运行才能完全加载 INI 文件。

如果您按照金字塔包装器执行此操作,您会这样做:

pyramid.paster.setup_logging(inipath)
pyramid.paster.get_app(inipath)

您使用这些而不是自己做的主要原因是,当inipath包含类似的部分说明符时,它们支持做“正确的事情” development.ini#myapp,这fileConfig会崩溃。

于 2013-09-27T19:11:33.263 回答