天天看點

json格式_python|使用jsonlogger輸出json格式日志

使用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})
           

但是發現,當日志有中文會有編碼問題,如圖

json格式_python|使用jsonlogger輸出json格式日志

檢視源碼,在JsonFormatter類中,發現可以通過設定json_ensure_ascii來設定json.dumps時的ensure_ascii參數,json.dumps()設定ensure_ascii=False,防止ascii編碼,保證中文輸出。

json格式_python|使用jsonlogger輸出json格式日志

修改如下:

fmt = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(levelname)s    %(filename)s %(funcName)s:%(lineno)d %(message)s',  json_ensure_ascii=False)
           

再次運作,中文可以正常輸出:

json格式_python|使用jsonlogger輸出json格式日志