🐶 python 在log中添加自定义字段

在平时开发中,会经常使用logging模块输出一些信息,logging 模块内容了一些字段如: 行号,日志级别,时间,文件名,行号等等,可是我们有时候可能需要自己添加一些字段来进行标识如 request_id 而这些自定义字段是不能直接使用的,那如何实现呢?这时候我们就需要自定义 Handler来实现这个目标。

import logging


def _get_request_id():
   # 利用它来生成request_id
    import flask_request_id
    return flask_request_id.id


def get_logger():
   # request_id 就是我们自己定义的新字段
    format_str = '[%(asctime)s_%(levelname)s]_[%(filename)s:%(lineno)d]_[%(request_id)s]: %(message)s'
    # request_id 的值就是从这个 extra 值中动态获取的
    extra = {"request_id": _get_request_id()}
    loger = logging.getLogger(__name__)
    stream = logging.StreamHandler()
    format_ = logging.Formatter(format_str)
    stream.setFormatter(format_)
    loger.setLevel(logging.INFO)
    loger.addHandler(stream)
    loger = logging.LoggerAdapter(loger, extra)
    return loger

为了使用方便我们可以将 request_id 放在flask的全局对象g中,这样我们就可以在在请求的任何地方使用了。

from flask_request_id import RequestID
@app.before_request
def before_request():
    # add  request_id  into global g object
    g.request_id = flask_request_id.id

🎉🎉🎉

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容