如何从烧瓶的全局'中添加一个id?访问日志中的对象?

时间:2014-11-11 00:21:52

标签: python logging flask gunicorn

我使用gunicorn来运行我的Flask应用程序。

我在Flask的全局user_id对象上有一个g,我想在每个经过身份验证的请求上登录。

有谁知道这样做的好方法?我尝试添加这样的自定义过滤器,但在执行记录器时请求似乎不在范围内:


class MyFilter(logging.Filter):

    def filter(self, record):
        if hasattr(g, 'user_id'):
            record.msg = "User ID: {0} ".format(g.user_id) + record.msg
        return 1

我期待这样的事情:

2014-11-08 21:52:15 [INFO] REQUESTLOG 127.0.0.1 User ID: 12345 "GET /v1.0/healthcheck HTTP/1.1" 200 51 "-" "curl/7.35.0"

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以继承Werkzeug请求处理程序并提供您自己的log_request()方法版本。这是一个例子:

from werkzeug.serving import BaseRequestHandler
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return "hi"

class MyRequestHandler(BaseRequestHandler):
    def log_request(self, code='-', size='-'):
        self.log('info', 'custom log! "%s" %s %s', self.requestline, code, size)

if __name__ == '__main__':
    app.run(debug=True, request_handler=MyRequestHandler)