如何将python金字塔女服务员日志重定向到heroku上的stdout?

时间:2016-12-16 01:16:57

标签: python logging pyramid

根据文档(http://docs.pylonsproject.org/projects/waitress/en/latest/):

  

Waitress发送其日志输出(包括应用程序异常   渲染)到名为waitress的Python记录器对象。您可以   使用普通的Python影响记录器级别和输出流   记录模块API。

这就是所有文件必须说的。我正在尝试将日志记录输出重定向到stdout。我将如何在pastedeploy .ini文件中执行此操作?

2 个答案:

答案 0 :(得分:0)

您是否尝试将请求记录到女服务员?我也永远无法让它发挥作用。事实上,几年前我就问过SO的问题,有人说它无法完成。

为了解决这个问题,我添加了一个金字塔"订阅者"为每个请求执行所有日志记录。

编辑。

在检查我的代码时,我停止使用订阅者并切换到使用补间进行日志记录。两种方式都有效。

tweens.py

import logging
log = logging.getLogger(__name__)

def simple_tween_factory(handler, registry):
    # one-time configuration code goes here

     def simple_tween(request):
        # code to be executed for each request before
        # the actual application code goes herE                                  

           response = handler(request)

    # code to be executed for each request after
    # the actual application code goes here

           path_qs = request.path_qs
           status = response.status
           log.debug('[{0}] {1}'.format(status, path_qs))                  ##See the path and query string for every response

           return response

return simple_tween

将此添加到您的金字塔配置

config.add_tween('{}.tweens.simple_tween_factory'.format(<your app name>))

答案 1 :(得分:0)

因此,问题似乎是官方的heroku迁移文档(http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/heroku.html)未能告诉您在初始化应用程序之前需要初始化女服务员的记录器。否则,不记录任何内容。

所以,我的问题不正确。并不是说日志记录是stderr,而是日志记录无处可去。

解决方案是对runapp.py文件进行以下更改。

import os

#from paste.deploy import loadapp
import pyramid.paster
from waitress import serve

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

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