2011-02-08 65 views

回答

8

斯坦达特中间件

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 

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

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') 
+0

我可以把这个响应之后发生,因此它的数据提供给用户尽快? – Timmy 2011-02-09 19:07:51

2

找不到任何文档完全是不可思议,因为日志模块的Python文档是非常详细和完整的:

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

你需要实现自己的MongoDBHandler,并附上EMIT()方法MongoDB 通过pymongo。

+0

雅,我不是太担心记录的一部分,但试图FIGUR EOUT在哪里把传销 – Timmy 2011-02-08 18:05:59

1

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

from pyramid.events import NewRequest 
import logging 

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

config.add_subscriber(mylogger, NewRequest) 
+0

请求后是否有事件?我想记录日志,但不会延迟响应 – Timmy 2011-02-09 19:10:17