python - 如何在访问日志中添加 Flask 全局 'g' 对象的 id?

标签 python logging flask gunicorn

我正在使用 Gunicorn 来运行我的 Flask 应用程序。

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

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


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"

谢谢!

最佳答案

您可以子类化 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)

关于python - 如何在访问日志中添加 Flask 全局 'g' 对象的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26855453/

相关文章:

python - 在 Python 中读取 .mat 文件

java - apache commons 日志记录中的打印格式

tomcat - 不能让 tomcat-maven-plugin 创建日志文件吗?

javascript - 让 python 通过浏览器与本地 Flask 应用程序对话

python - 将值从下拉菜单传递到 Flask 模板

python - 有没有办法使用 Python 的 Celery 在具有特定任务 ID 的特定任务成功或失败时立即收到通知?

python - 3d 网格的掩蔽和直方图

python - 用另一列的值替换字符串的一部分

python - 使用 Twisted 的 twisted.web 类,我如何刷新传出缓冲区?

c# - 如何登录 Entity Framework Core UseSqlServer 重试