python log 自定义formatter
问题
自定义log formatter, 如添加request_id
方法
- 定义Logging Filter
class ServerFilter(logging.Filter): ... def filter(self, record): record.request_id = xxx return True handler.addFilter(ServerFilter()) handler.setFormatter(ServerFormatter(f"%(asctime)s - {hostname} - [%(levelname)s] - %(filename)s:%(lineno)s: %(name)s: |%(request_id)s| %(message)s"))
- 定义logging Formater
class ServerFormatter(logging.Formatter): ... def format(self, record): record.request_id = xxx return super(ServerFormatter, self).format(record) handler.setFormatter(ServerFormatter(f"%(asctime)s - {hostname} - [%(levelname)s] - %(filename)s:%(lineno)s: %(name)s: |%(request_id)s| %(message)s"))
问题
- 如何对自定义变量赋值?比如上述record.request_id = xxx, xxx的值如何获取?
- 方式1: 使用app的request上下文,自动获取request_id并赋值
- 方式2: 在打印日志的时候,手动赋值log.$filter.request_id = "xxxx" ,针对sanic可以在@bp.on_request阶段设置log.filter.request_id
- 方式3: 打印日志的时候,手动赋值extra, log.info("", extra=extra);extra["request_id"] = "xxx"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律