首页 > 解决方案 > 如何使用 python Logger 在烧瓶服务中记录自定义数据

问题描述

我有flask服务,我正在尝试在 Logger 中添加一些自定义字段

我提到了这个问题

并实现了这个

from flask import Flask, request
from flask_cors import CORS
import logging
import json


logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

ch = logging.StreamHandler()

formatter = """{"name":,%(name)s, "module_name": %(module)s,"pid": %(process)d,"level": %(levelno)d,\
"level_name": %(levelname)s, "msg": %(message)s, "data": %(data_)s, "time": %(asctime)s,\
"src": { "file": %(pathname)s, "line": %(lineno)d }, "function": %(funcName)s}"""

formatter = logging.Formatter(formatter)
ch.setFormatter(formatter)
logger.addHandler(ch)

adapter = logging.LoggerAdapter(logger=logger, extra=dict(data_=0))


app = Flask(__name__)
CORS(app)


@app.route('/home', methods=["GET"])
def home():
    adapter.info("OK", extra=dict(data_=0))
    return "OK"


@app.route('/user', methods=["POST"])
def user_check():
    req_data = json.loads(request.data)
    adapter.info("User check request received", extra=dict(data_=23))
    return "Check Complete"


if __name__ == "__main__":
    app.run('0.0.0.0', debug=True)

每当我点击服务时http://127.0.0.1:5000/user,我都会收到如下日志

{"name":,__main__, "module_name": app,"pid": 433712,"level": 20,"level_name": INFO, "msg": User check request received, "data": 0, "time": 2020-12-19 12:19:13,782,"src": { "file": app.py, "line": 43 }, "function": user_check}

如果您看到数据没有使用传入extra参数的值进行更新,我无法理解为什么它没有更新或

有没有更好的方法将自定义字段添加到 Logger 中?

标签: pythonflasklogging

解决方案


似乎可以使用logger.info()而不是adapter.info().


推荐阅读