2011-02-08 35 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