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"))
    

问题

  1. 如何对自定义变量赋值?比如上述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"
posted @   春树&暮云  阅读(628)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示