首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为金字塔/塔架2编写日志中间件?

如何为金字塔/塔架2编写日志中间件?
EN

Stack Overflow用户
提问于 2011-02-09 01:54:01
回答 4查看 3.3K关注 0票数 5

我想使用mongodb或redis为金字塔/塔架中的用户保存日志,但找不到创建中间件的文档。我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-09 14:34:35

标准中间件

代码语言:javascript
运行
复制
class LoggerMiddleware(object):
    '''WSGI middleware'''

    def __init__(self, application):

        self.app = application

    def __call__(self, environ, start_response):

        # write logs

        try:
            return self.app(environ, start_response)
        except Exception, e:
            # write logs
            pass
        finally:
            # write logs
            pass

在创建金字塔应用程序代码中:

代码语言:javascript
运行
复制
from paste.httpserver import serve
from pyramid.response import Response
from pyramid.view import view_config

@view_config()
def hello(request):
    return Response('Hello')

if __name__ == '__main__':
    from pyramid.config import Configurator
    config = Configurator()
    config.scan()
    app = config.make_wsgi_app()

    # Put middleware
    app = LoggerMiddleware(app)

    serve(app, host='0.0.0.0')
票数 9
EN

Stack Overflow用户

发布于 2011-02-09 02:01:28

找不到任何文档是非常奇怪的,因为日志记录模块的Python文档非常冗长和完整:

http://docs.python.org/library/logging.html#handler-objects

您需要实现自己的MongoDBHandler,并通过pymongo使用MongoDB附加emit()方法。

票数 2
EN

Stack Overflow用户

发布于 2011-02-10 01:42:49

这种情况下的另一种选择是根本不使用中间件,而只是在金字塔中使用BeforeRequest事件。

代码语言:javascript
运行
复制
from pyramid.events import NewRequest
import logging

def mylogger(event):
    request = event.request
    logging.info('request occurred')

config.add_subscriber(mylogger, NewRequest)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4936507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档