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 @ 2022-03-17 22:08  春树&暮云  阅读(518)  评论(0编辑  收藏  举报