我想使用mongodb或redis为金字塔/挂架上的用户保留日志,但无法找到有关创建middeware的文档。我该如何解决它?如何为金字塔/塔架2编写日志记录中间件?
4
A
回答
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')
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
我可以把这个响应之后发生,因此它的数据提供给用户尽快? – Timmy 2011-02-09 19:07:51