您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Python Log文件大小設(shè)置及備份的方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
日志文件代碼需要引入RotatingFileHandler方法,如下:
from logging.handlers import RotatingFileHandler
配置文件大小及數(shù)量,比如:“設(shè)置寫入文件,如果文件超過(guò)1M大小時(shí),切割日志文件,僅保留3個(gè)文件”,如下所示:
# 寫入文件,如果文件超過(guò)1M大小時(shí),切割日志文件,僅保留3個(gè)文件 logger_handler = RotatingFileHandler(filename=log_path, maxBytes=1 * 1024 * 1024, backupCount=3, encoding='utf-8')
若文件大小超過(guò)1M大小時(shí),就切割日志文件,僅保留3個(gè)文件,并且文件的格式為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__)) # 當(dāng)前項(xiàng)目路徑 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文件夾,則自動(dòng)創(chuàng)建 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: """ 先創(chuàng)建日志記錄器(logging.getLogger),然后再設(shè)置日志級(jí)別(logger.setLevel), 接著再創(chuàng)建日志文件,也就是日志保存的地方(logging.FileHandler),然后再設(shè)置日志格式(logging.Formatter), 最后再將日志處理程序記錄到記錄器(addHandler) """ def __init__(self): self.__now_time = datetime.now().strftime('%Y-%m-%d') # 當(dāng)前日期格式化 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") # 收集錯(cuò)誤日志信息文件 self.__logger = logging.getLogger() # 創(chuàng)建日志記錄器 self.__logger.setLevel(logging.DEBUG) # 設(shè)置默認(rèn)日志記錄器記錄級(jí)別 @staticmethod def __init_logger_handler(log_path): """ 創(chuàng)建日志記錄器handler,用于收集日志 :param log_path: 日志文件路徑 :return: 日志記錄器 """ # 寫入文件,如果文件超過(guò)1M大小時(shí),切割日志文件,僅保留3個(gè)文件 logger_handler = RotatingFileHandler(filename=log_path, maxBytes=1 * 1024 * 1024, backupCount=3, encoding='utf-8') return logger_handler @staticmethod def __init_console_handle(): """創(chuàng)建終端日志記錄器handler,用于輸出到控制臺(tái)""" console_handle = colorlog.StreamHandler() return console_handle def __set_log_handler(self, logger_handler, level=logging.DEBUG): """ 設(shè)置handler級(jí)別并添加到logger收集器 :param logger_handler: 日志記錄器 :param level: 日志記錄器級(jí)別 """ logger_handler.setLevel(level=level) self.__logger.addHandler(logger_handler) def __set_color_handle(self, console_handle): """ 設(shè)置handler級(jí)別并添加到終端logger收集器 :param console_handle: 終端日志記錄器 :param level: 日志記錄器級(jí)別 """ console_handle.setLevel(logging.DEBUG) self.__logger.addHandler(console_handle) @staticmethod def __set_color_formatter(console_handle, color_config): """ 設(shè)置輸出格式-控制臺(tái) :param console_handle: 終端日志記錄器 :param color_config: 控制臺(tái)打印顏色配置信息 :return: """ formatter = colorlog.ColoredFormatter(default_formats["color_format"], log_colors=color_config) console_handle.setFormatter(formatter) @staticmethod def __set_log_formatter(file_handler): """ 設(shè)置日志輸出格式-日志文件 :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): """ 關(guān)閉handler :param file_handler: 日志記錄器 """ file_handler.close() def __console(self, level, message): """構(gòu)造日志收集器""" all_logger_handler = self.__init_logger_handler(self.__all_log_path) # 創(chuàng)建日志文件 error_logger_handler = self.__init_logger_handler(self.__error_log_path) console_handle = self.__init_console_handle() self.__set_log_formatter(all_logger_handler) # 設(shè)置日志格式 self.__set_log_formatter(error_logger_handler) self.__set_color_formatter(console_handle, log_colors_config) self.__set_log_handler(all_logger_handler) # 設(shè)置handler級(jí)別并添加到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) # 避免日志輸出重復(fù)問(wèn)題 self.__logger.removeHandler(error_logger_handler) self.__logger.removeHandler(console_handle) self.__close_handler(all_logger_handler) # 關(guān)閉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("這是錯(cuò)誤日志信息") log.critical("這是嚴(yán)重級(jí)別信息")
“Python Log文件大小設(shè)置及備份的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。