您好,登錄后才能下訂單哦!
本篇內容介紹了“Python Log文件大小設置及備份的方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
日志文件代碼需要引入RotatingFileHandler方法,如下:
from logging.handlers import RotatingFileHandler
配置文件大小及數量,比如:“設置寫入文件,如果文件超過1M大小時,切割日志文件,僅保留3個文件”,如下所示:
# 寫入文件,如果文件超過1M大小時,切割日志文件,僅保留3個文件 logger_handler = RotatingFileHandler(filename=log_path, maxBytes=1 * 1024 * 1024, backupCount=3, encoding='utf-8')
若文件大小超過1M大小時,就切割日志文件,僅保留3個文件,并且文件的格式為app.log1、app.log2...,如圖所示:
RotatingFileHandler方法源碼,如下所示:
#!/usr/bin/env python # -*- coding:utf-8 -*- """ ------------------------------------ # @FileName :handle_log.py # @Time :2020/8/31 19:59 # @Author :xieyuanzuo # @description : ------------------------------------ """ import logging import os import colorlog from logging.handlers import RotatingFileHandler from datetime import datetime cur_path = os.path.dirname(os.path.realpath(__file__)) # 當前項目路徑 log_path = os.path.join(os.path.dirname(cur_path), 'logs') # log_path為存放日志的路徑 if not os.path.exists(log_path): os.mkdir(log_path) # 若不存在logs文件夾,則自動創建 log_colors_config = { # 終端輸出日志顏色配置 'DEBUG': 'white', 'INFO': 'cyan', 'WARNING': 'yellow', 'ERROR': 'red', 'CRITICAL': 'bold_red', } default_formats = { # 終端輸出格式 'color_format': '%(log_color)s%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[日志信息]: %(message)s', # 日志輸出格式 'log_format': '%(asctime)s-%(name)s-%(filename)s-[line:%(lineno)d]-%(levelname)s-[日志信息]: %(message)s' } class HandleLog: """ 先創建日志記錄器(logging.getLogger),然后再設置日志級別(logger.setLevel), 接著再創建日志文件,也就是日志保存的地方(logging.FileHandler),然后再設置日志格式(logging.Formatter), 最后再將日志處理程序記錄到記錄器(addHandler) """ def __init__(self): self.__now_time = datetime.now().strftime('%Y-%m-%d') # 當前日期格式化 self.__all_log_path = os.path.join(log_path, self.__now_time + "-all" + ".log") # 收集所有日志信息文件 self.__error_log_path = os.path.join(log_path, self.__now_time + "-error" + ".log") # 收集錯誤日志信息文件 self.__logger = logging.getLogger() # 創建日志記錄器 self.__logger.setLevel(logging.DEBUG) # 設置默認日志記錄器記錄級別 @staticmethod def __init_logger_handler(log_path): """ 創建日志記錄器handler,用于收集日志 :param log_path: 日志文件路徑 :return: 日志記錄器 """ # 寫入文件,如果文件超過1M大小時,切割日志文件,僅保留3個文件 logger_handler = RotatingFileHandler(filename=log_path, maxBytes=1 * 1024 * 1024, backupCount=3, encoding='utf-8') return logger_handler @staticmethod def __init_console_handle(): """創建終端日志記錄器handler,用于輸出到控制臺""" console_handle = colorlog.StreamHandler() return console_handle def __set_log_handler(self, logger_handler, level=logging.DEBUG): """ 設置handler級別并添加到logger收集器 :param logger_handler: 日志記錄器 :param level: 日志記錄器級別 """ logger_handler.setLevel(level=level) self.__logger.addHandler(logger_handler) def __set_color_handle(self, console_handle): """ 設置handler級別并添加到終端logger收集器 :param console_handle: 終端日志記錄器 :param level: 日志記錄器級別 """ console_handle.setLevel(logging.DEBUG) self.__logger.addHandler(console_handle) @staticmethod def __set_color_formatter(console_handle, color_config): """ 設置輸出格式-控制臺 :param console_handle: 終端日志記錄器 :param color_config: 控制臺打印顏色配置信息 :return: """ formatter = colorlog.ColoredFormatter(default_formats["color_format"], log_colors=color_config) console_handle.setFormatter(formatter) @staticmethod def __set_log_formatter(file_handler): """ 設置日志輸出格式-日志文件 :param file_handler: 日志記錄器 """ formatter = logging.Formatter(default_formats["log_format"], datefmt='%a, %d %b %Y %H:%M:%S') file_handler.setFormatter(formatter) @staticmethod def __close_handler(file_handler): """ 關閉handler :param file_handler: 日志記錄器 """ file_handler.close() def __console(self, level, message): """構造日志收集器""" all_logger_handler = self.__init_logger_handler(self.__all_log_path) # 創建日志文件 error_logger_handler = self.__init_logger_handler(self.__error_log_path) console_handle = self.__init_console_handle() self.__set_log_formatter(all_logger_handler) # 設置日志格式 self.__set_log_formatter(error_logger_handler) self.__set_color_formatter(console_handle, log_colors_config) self.__set_log_handler(all_logger_handler) # 設置handler級別并添加到logger收集器 self.__set_log_handler(error_logger_handler, level=logging.ERROR) self.__set_color_handle(console_handle) if level == 'info': self.__logger.info(message) elif level == 'debug': self.__logger.debug(message) elif level == 'warning': self.__logger.warning(message) elif level == 'error': self.__logger.error(message) elif level == 'critical': self.__logger.critical(message) self.__logger.removeHandler(all_logger_handler) # 避免日志輸出重復問題 self.__logger.removeHandler(error_logger_handler) self.__logger.removeHandler(console_handle) self.__close_handler(all_logger_handler) # 關閉handler self.__close_handler(error_logger_handler) 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) def critical(self, message): self.__console('critical', message) log = HandleLog() if __name__ == '__main__': for i in range(50000): log.info("這是日志信息") log.debug("這是debug信息") log.warning("這是警告信息") log.error("這是錯誤日志信息") log.critical("這是嚴重級別信息")
“Python Log文件大小設置及備份的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。