Python Log文件大小設(shè)置及備份的方法
一、配置文件大小及數(shù)量
日志文件代碼需要引入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í)別信息")
到此這篇關(guān)于Python Log文件大小設(shè)置及備份的文章就介紹到這了,更多相關(guān)Python Log文件備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Python編程中3個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法
這篇文章主要介紹了淺談Python編程中3個(gè)常用的數(shù)據(jù)結(jié)構(gòu)和算法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問(wèn)題使用探究
XGBoost是一個(gè)流行的梯度提升庫(kù),特別適用于解決各種機(jī)器學(xué)習(xí)問(wèn)題,它在性能和速度上表現(xiàn)出色,常被用于分類、回歸、排序、推薦系統(tǒng)等應(yīng)用,本文將介紹XGBoost的基本原理、核心功能以及一些詳細(xì)的示例代碼2024-01-01
python實(shí)現(xiàn)list由于numpy array的轉(zhuǎn)換
下面小編就為大家分享一篇python實(shí)現(xiàn)list由于numpy array的轉(zhuǎn)換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用Django簡(jiǎn)單編寫一個(gè)XSS平臺(tái)的方法步驟
這篇文章主要介紹了使用Django簡(jiǎn)單編寫一個(gè)XSS平臺(tái)的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
Python Http請(qǐng)求json解析庫(kù)用法解析
這篇文章主要介紹了Python Http請(qǐng)求json解析庫(kù)用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
pycharm 主題theme設(shè)置調(diào)整仿sublime的方法
今天小編就為大家分享一篇pycharm 主題theme設(shè)置調(diào)整仿sublime的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

