2011-02-08 2 views

ответ

8

Standart промежуточного

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

2

Не можете найти документы совершенно странно, так как документация Python модуля регистрации довольно многословен и полное:

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

Вы должны реализовать свой собственный MongoDBHandler и прикрепить метод Испустите() с MongoDB через pymongo.

+0

Я., я не слишком беспокоиться о лесозаготовительной части, но при попытке Figur Eout, где поставить в пирамиде – Timmy

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

+0

Существует pyramid.events.NewResponse, но он не срабатывает, если ответ не создается, например, когда возникло непокрытое исключение. – mdob