您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“python中如何自定義封裝帶顏色的logging模塊”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python中如何自定義封裝帶顏色的logging模塊”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
自己在搭建python接口自動化框架 分享一些內容過程中想自己封裝一個logger方法 根據logging進行二次封裝 代碼如下
import logging import os import time import colorlog from logging.handlers import RotatingFileHandler # 創建文件目錄 cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路徑 log_path = os.path.join(os.path.dirname(cur_path), 'logs') if not os.path.exists(log_path): os.mkdir(log_path) # 如果不存在這個logs文件夾,就自動創建一個 # 修改log保存位置 timestamp = time.strftime("%Y-%m-%d", time.localtime()) logfile_name = '%s.log' % timestamp logfile_path = os.path.join(log_path, logfile_name) # 定義不同日志等級顏色 log_colors_config = { 'DEBUG': 'bold_cyan', 'INFO': 'bold_green', 'WARNING': 'bold_yellow', 'ERROR': 'bold_red', 'CRITICAL': 'red', } class Logger(logging.Logger): def __init__(self, name, level='DEBUG', file=None, encoding='utf-8'): super().__init__(name) self.encoding = encoding self.file = file self.level = level # 針對所需要的日志信息 手動調整顏色 formatter = colorlog.ColoredFormatter( '%(log_color)s%(levelname)1.1s %(asctime)s %(reset)s| %(message_log_color)s%(levelname)-8s %(reset)s| %(' 'log_color)s[%(filename)s%(reset)s:%(log_color)s%(module)s%(reset)s:%(log_color)s%(funcName)s%(' 'reset)s:%(log_color)s%(''lineno)d] %(reset)s- %(white)s%(message)s', reset=True, log_colors=log_colors_config, secondary_log_colors={ 'message': { 'DEBUG': 'blue', 'INFO': 'blue', 'WARNING': 'blue', 'ERROR': 'red', 'CRITICAL': 'bold_red' } }, style='%' ) # 日志輸出格式 # 創建一個FileHandler,用于寫到本地 rotatingFileHandler = logging.handlers.RotatingFileHandler(filename=logfile_path, maxBytes=1024 * 1024 * 50, backupCount=5) rotatingFileHandler.setFormatter(formatter) rotatingFileHandler.setLevel(logging.DEBUG) self.addHandler(rotatingFileHandler) # 創建一個StreamHandler,用于輸出到控制臺 console = colorlog.StreamHandler() console.setLevel(logging.DEBUG) console.setFormatter(formatter) self.addHandler(console) self.setLevel(logging.DEBUG) logger = Logger(name=logfile_path, file=logfile_path)
使用時我們只需要引入封裝好的類就行 直觀美麗大方~
# 引入封裝好的logger模塊 from common.logger_handler import logger def physical_strength(self, abnormal): """兌換體力異常通用方法""" if self.attrs.__contains__('costType'): attrs_Type = { "costType": abnormal, "count": self.attrs["count"] } response_Type = r().response(self.send_uid, self.code, self.event, attrs_Type) # 使用時直接調用logger.info()就行 logger.info(f"physical_strength_{abnormal},response_Type:{response_Type}") assert response_Type["code"] != 0 time.sleep(2) attrs_count = { "costType": self.attrs["costType"], "count": abnormal } response_count = r().response(self.send_uid, self.code, self.event, attrs_count) logger.info(f"physical_strength_{abnormal},response_count:{response_count}") assert response_count["code"] != 0 time.sleep(2) attrs_all = { "costType": abnormal, "count": abnormal } response_all = r().response(self.send_uid, self.code, self.event, attrs_all) logger.info(f"physical_strength_{abnormal},response_all:{response_all}") assert response_all["code"] != 0 time.sleep(2) else: attrs_count = { "count": abnormal } response_count = r().response(self.send_uid, self.code, self.event, attrs_count) logger.info(f"physical_strength_{abnormal},response_count:{response_count}") assert response_count["code"] != 0 time.sleep(2)
效果:按照 日期/時間/日志等級/文件名稱/類/方法名稱/代碼行數展示(這里可以自己手動調整formatter參數 如果感覺展示太長的話)
%(levelno)s: 打印日志級別的數值
%(levelname)s: 打印日志級別名稱
%(pathname)s: 打印當前執行程序的路徑,其實就是sys.argv[0]
%(filename)s: 打印當前執行程序名
%(funcName)s: 打印日志的當前函數
%(lineno)d: 打印日志的當前行號
%(asctime)s: 打印日志的時間
%(thread)d: 打印線程ID
%(threadName)s: 打印線程名稱
%(process)d: 打印進程ID
%(message)s: 打印日志信息
避坑:不要用這種方式去調用日志等級方法 會出現日志打印定位路徑錯誤 只能定位在log封裝類當前方法下
def debug(self, message): self.__console('debug', message) def info(self, message): self.__console('info', message) def warning(self, message): self.__console('warning', message) def error(self, message): self.__console('error', message)
讀到這里,這篇“python中如何自定義封裝帶顏色的logging模塊”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。