最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Log文件大小設(shè)置及備份的方法

 更新時間:2021年11月29日 09:51:55   作者:xyztank  
這篇文章主要介紹了Python Log文件大小設(shè)置及備份的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、配置文件大小及數(shù)量

日志文件代碼需要引入RotatingFileHandler方法,如下:

from logging.handlers import RotatingFileHandler

配置文件大小及數(shù)量,比如:“設(shè)置寫入文件,如果文件超過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文件夾,則自動創(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è)置日志級別(logger.setLevel),
    接著再創(chuàng)建日志文件,也就是日志保存的地方(logging.FileHandler),然后再設(shè)置日志格式(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()  # 創(chuàng)建日志記錄器
        self.__logger.setLevel(logging.DEBUG)  # 設(shè)置默認日志記錄器記錄級別

    @staticmethod
    def __init_logger_handler(log_path):
        """
        創(chuàng)建日志記錄器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():
        """創(chuàng)建終端日志記錄器handler,用于輸出到控制臺"""
        console_handle = colorlog.StreamHandler()
        return console_handle

    def __set_log_handler(self, logger_handler, level=logging.DEBUG):
        """
        設(shè)置handler級別并添加到logger收集器
        :param logger_handler: 日志記錄器
        :param level: 日志記錄器級別
        """
        logger_handler.setLevel(level=level)
        self.__logger.addHandler(logger_handler)

    def __set_color_handle(self, console_handle):
        """
        設(shè)置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):
        """
        設(shè)置輸出格式-控制臺
        :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):
        """
        設(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級別并添加到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ù)問題
        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("這是錯誤日志信息")
        log.critical("這是嚴重級別信息")

到此這篇關(guān)于Python Log文件大小設(shè)置及備份的文章就介紹到這了,更多相關(guān)Python Log文件備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pytest配置文件pytest.ini的詳細使用

    pytest配置文件pytest.ini的詳細使用

    這篇文章主要介紹了pytest配置文件pytest.ini的詳細使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Python打造出適合自己的定制化Eclipse IDE

    Python打造出適合自己的定制化Eclipse IDE

    這篇文章主要介紹了Python打造出適合自己的定制化Eclipse IDE的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python實現(xiàn)人臉簽到系統(tǒng)

    python實現(xiàn)人臉簽到系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)人臉簽到系統(tǒng),帶數(shù)據(jù)庫存儲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python字典 dict幾種遍歷方式

    Python字典 dict幾種遍歷方式

    這篇文章主要給大家分享的是Python字典 dict幾種遍歷方式,文章主要介紹使用 for key in dict遍歷字典、使用for key in dict.keys () 遍歷字典的鍵等內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復(fù)手機號碼提示框

    Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復(fù)手機號碼提示框

    這篇文章主要介紹了Python+Selenium隨機生成手機驗證碼并檢查頁面上是否彈出重復(fù)手機號碼提示框,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法示例

    Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法示例

    這篇文章主要介紹了Python開發(fā)中爬蟲使用代理proxy抓取網(wǎng)頁的方法,結(jié)合具體實例形式分析了urllib模塊代理與requests模塊代理兩種實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • pycharm遠程連接服務(wù)器調(diào)試tensorflow無法加載問題

    pycharm遠程連接服務(wù)器調(diào)試tensorflow無法加載問題

    最近打算在win系統(tǒng)下使用pycharm開發(fā)程序,并遠程連接服務(wù)器調(diào)試程序,其中在import tensorflow時報錯,本文就來介紹一下如何解決,感興趣的可以了解一下
    2021-06-06
  • Python流程控制語句詳解

    Python流程控制語句詳解

    所有編程語言在編寫時都要遵守語音結(jié)構(gòu)和流程控制,他們控制了整個程序的運行步驟。流程控制包括順序控制、條件控制和循環(huán)控制
    2022-07-07
  • python基礎(chǔ)入門之列表(一)

    python基礎(chǔ)入門之列表(一)

    在Python中,列表(list)是常用的數(shù)據(jù)類型。列表由一系列按照特定順序排列的項(item)組成。
    2021-06-06
  • Python對小數(shù)進行除法運算的正確方法示例

    Python對小數(shù)進行除法運算的正確方法示例

    這篇文章主要介紹了Python對小數(shù)進行除法運算的正確方法示例,正確的方法是需要轉(zhuǎn)換成浮點數(shù),否則永遠不會得到正確結(jié)果,需要的朋友可以參考下
    2014-08-08

最新評論

余姚市| 星子县| 股票| 上饶县| 镇康县| 固原市| 岐山县| 剑阁县| 汶上县| 伊金霍洛旗| 青海省| 崇义县| 靖安县| 乌审旗| 日土县| 康马县| 绥宁县| 英超| 栖霞市| 松原市| 忻城县| 深州市| 宜宾市| 泽州县| 桑植县| 海原县| 社会| 张家港市| 托克托县| 平顶山市| 闻喜县| 依安县| 微山县| 民权县| 永川市| 耿马| 长沙市| 通江县| 富源县| 东城区| 张北县|