python - 如何使用 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 中?
解决方案
似乎可以使用logger.info()
而不是adapter.info()
.
推荐阅读
- python - 基于 Python tile 的 numpy 数组处理
- html - 将表单输入中的 + 替换为 -
- python - 无法识别用户何时在带有 Zelle 图形的圆圈内单击
- javascript - 如何在功能组件中将下一个输入集中在按 Enter 键上?(TAB 行为)
- python - 成功在 Azure 上部署 Flask 应用程序,但应用程序在打开网站时无法运行
- android - Flutter Build Apk 错误“未解决的参考:snackbar”
- javascript - 我如何能够在两行中显示标题,每行的字体大小不同?
- aws-lambda - DynamoDB 更新数据有效但返回内部服务器错误
- jquery - 防止点击时触发下拉菜单
- matlab - 在 MATLAB 中实现我自己的 FFT 给出错误的结果