python logging 使用封装

自己对python logging 模块进行了封装,主要实现了以下功能,代码可以直接使用,logging的细节就不赘述了

1、单例模式调用日志Singleton
2、设置控制台打印日志setBasic(不设置不会在输出窗口打印)
3、添加普通日志addLogHandle
4、添加按文件大小可回滚日志addRotatingLogHandle
5、添加按时间生成可回滚日志TimedRotatingFileHandler

这几个基本就够用了,下面是具体代码实现(mylog.py):

import logging, logging.handlers


ONE_FILE_MAX_SIZE = 4 * 1024 * 1024    #单个文件的最大容量
MAX_FILE_COUNT = 100      #日志回滚时默认的最大日志文件个数


class MySingletonLog():
    __singleton = None
    def __init__(self):
        pass

    def init(self, level = logging.DEBUG):
        self.logger = logging.getLogger()
        self.logger.setLevel(level)
        self.format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s'
        self.formatter = logging.Formatter(self.format)

    def setBasic(self, level = logging.DEBUG):
        '''
        设置控制台显示
        '''
        logging.basicConfig(level = level, format = self.format)

    def addLogHandle(self, fileName, level = logging.DEBUG):
        '''
        添加普通类型日志文件
        '''
        fileHandle = logging.FileHandler(fileName)
        fileHandle.setFormatter(self.formatter)
        fileHandle.setLevel(level)
        self.logger.addHandler(fileHandle)

    def addRotatingLogHandle(self, fileName, level = logging.DEBUG, size = ONE_FILE_MAX_SIZE, count = MAX_FILE_COUNT):
        '''
        添加按文件大小和个数回滚类型日志文件
        fileName:文件名称
        level:保存日志的等级
        oneFileMaxSize:单个文件的最大容量
        maxFileCount:保留日志文件个数
        '''
        fileHandle = logging.handlers.RotatingFileHandler(fileName, maxBytes=size, backupCount=count)
        fileHandle.setFormatter(self.formatter)
        fileHandle.setLevel(level)
        self.logger.addHandler(fileHandle)

    def addTimeRotatingLogHandle(self, fileName, level = logging.DEBUG, timeSpan="M", timeWhen=2, count = MAX_FILE_COUNT):
        '''
        添加按日期回滚类型日志文件
        fileName:输出日志的文件名称前缀
        level:保存日志的等级
        timeSpan:日志切分的间隔时间,经过timeSpan的时间产生一个新的文件
        timeWhen:是指等待多少个单位when的时间后,Logger会自动重建文件
        maxFileCount:保留日志文件个数
        '''
        fileHandle = logging.handlers.TimedRotatingFileHandler(fileName, when=timeSpan, interval=timeWhen, backupCount=count)
        fileHandle.setFormatter(self.formatter)
        fileHandle.setLevel(level)
        self.logger.addHandler(fileHandle)

    @staticmethod
    def Singleton(level = logging.DEBUG):
        #单例模式
        if MySingletonLog.__singleton == None:
            MySingletonLog.__singleton = MySingletonLog()
            MySingletonLog.__singleton.init(level)

        return MySingletonLog.__singleton

以下是测试代码,分别对各接口进行了调用,生成日志文件(logTest.py):

import logging
import time
from mylog import MySingletonLog


logSingleton = MySingletonLog.Singleton(logging.DEBUG)

logSingleton.setBasic()#命令行打印

#添加普通日志,会一直记录
logSingleton.addLogHandle('./normal.log')

#添加按文件大小回滚日志,日志大小为1000Byte,允许回滚10个文件
logSingleton.addRotatingLogHandle('./rotat.log', size = 10000, count = 10)

#按时间回滚日志,允许回滚10个文件
logSingleton.addTimeRotatingLogHandle('./timeRotat.log', count = 10)

count = 0
while True:
    time.sleep(0.1)
    count = count + 1
    logging.debug('test rotation log-----------' + str(count))

以下是日志文件截图,测试没有发现问题。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值