使用jsonlogger庫将日志輸出為json格式,友善後續對日志進行處理,代碼如下:
# -*- coding: utf-8 -*-import loggingfrom pythonjsonlogger import jsonloggerlogger = logging.getLogger()ch = logging.StreamHandler() // 輸出到标準輸出fmt = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(levelname)s %(filename)s %(funcName)s:%(lineno)d %(message)s')ch.setFormatter(fmt)logger.setLevel(logging.DEBUG)logger.addHandler(ch)logger.info("PROGRESS", extra={"event_type": "EventType.PROGRESS", "status": "運作中", "total": 100, "current": 5})
但是發現,當日志有中文會有編碼問題,如圖

檢視源碼,在JsonFormatter類中,發現可以通過設定json_ensure_ascii來設定json.dumps時的ensure_ascii參數,json.dumps()設定ensure_ascii=False,防止ascii編碼,保證中文輸出。
修改如下:
fmt = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(levelname)s %(filename)s %(funcName)s:%(lineno)d %(message)s', json_ensure_ascii=False)
再次運作,中文可以正常輸出: