1. 程式人生 > 程式設計 >Python日誌:自定義輸出欄位 json格式輸出方式

Python日誌:自定義輸出欄位 json格式輸出方式

最近有一個需求:將日誌以json格式輸出,並且有些欄位是logging模組沒有的.看了很多原始碼和資料,終於搞定,抽取精華分享出來,一起成長.

import json
import logging
 
class JsonFilter(logging.Filter):
 
 ip = 'IP'
 source = 'APP'
 
 def filter(self,record):
  record.ip = self.ip
  record.username = self.source
  return True
 
if __name__ == '__main__':
 
 formate = json.dumps({
  "time": "%(asctime)s","levelname": "%(levelname)s","levelno": "%(lineno)d","ip": "%(ip)s","source": "%(source)s"
 })
 logging.basicConfig(level=logging.DEBUG,format=formate)
 logger = logging.getLogger()
 filter_ = JsonFilter()
 logger.addFilter(filter_)
 
 logger.debug('A debug message')
 
 filter_.ip = '127.0.0.1'
 filter_.source= 'china'
 logger.info('A message for test')

執行結果:

Python日誌:自定義輸出欄位 json格式輸出方式

其實就是重寫了logging.Filter的filter方法,自定義需要的欄位,在呼叫日誌輸出時,賦予相應的值即可.不賦予相應的值時也可以輸出日誌,會自動按照定義欄位時的資訊輸出.

補充知識:Log列印完整引數,生成Json檔案

當字元數量足夠多的的時候,Log控制檯便會自動擷取,不能在控制檯上完整輸出,可以利用如下方法,這種方式會在測試機或者虛擬機器的根目錄生成一個new.json檔案,裡面是完整的Log資訊

public static void printStringToFile(String str) {
 File file = new File(Environment.getExternalStorageDirectory(),"new.json");
 Log.d("Lyb","path = " + file.getAbsolutePath());
 FileWriter writer = null;
 try {
  Log.d("Lyb","createNewFile");
  if (!file.exists()) {
   file.createNewFile();
  }else {
   file.delete();
   file.createNewFile();
  }
  writer = new FileWriter(file,true);
  writer.write(str);
  writer.flush();
  writer.close();
  writer = null;
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   if (writer != null) {
    writer.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

以上這篇Python日誌:自定義輸出欄位 json格式輸出方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。