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"