一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python Log文件大小設置及備份的方法

Python Log文件大小設置及備份的方法

2022-03-09 12:48xyztank Python

這篇文章主要介紹了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...,如圖所示:

Python Log文件大小設置及備份的方法

RotatingFileHandler方法源碼,如下所示:

Python Log文件大小設置及備份的方法

 

二、日志代碼

#!/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文件大小設置及備份的文章就介紹到這了,更多相關Python Log文件備份內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/xyztank/articles/13599165.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩在线毛片 | 国内精品久久久久影院男同志 | 天堂在线中文无弹窗全文阅读 | 波多野结衣中文字幕乱七八糟 | 精品久久99麻豆蜜桃666 | 免费超级乱淫播放手机版 | 亚洲天堂视频在线观看 | 日本黄a三级三级三级 | 99久久香蕉国产线看观香 | 亚洲精品无码不卡 | 调教扩张宫颈女人惨叫 | 数学老师扒开腿让我爽快 | 四虎影音在线 | 精新精新国产自在现拍 | 给我免费的视频在线观看 | 农夫69小说恋老妇小说 | 美女用手扒开粉嫩的屁股 | 欧美日韩一区二区三区久久 | 亚洲丰满女人ass硕大 | 久久婷婷丁香五月色综合啪免费 | 色综久久天天综合绕视看 | 国产欧美一区二区精品性色99 | 天天澡夜夜澡狠狠澡 | 欧美yyy| 免费人成在线观看视频播放 | 四虎在线视频免费观看视频 | 亚洲天堂在线视频播放 | 午夜影院在线免费观看 | 国产实拍会所女技师在线 | 91热国产 | 美女模特被c免费视频 | 国产精品国产三级在线专区 | 国产资源视频在线观看 | 美女污视频在线观看 | 国产成人福利色视频 | 青涩体验在线观看未删减 | 国产日本免费 | 久久国产综合精品欧美 | 91视频完整版| 大胆人gogo888体艺术在线 | 国产精品微拍 |