Python3 logging之日志回滚TimeRotatingFileHandler when="D"日志log文件未删除

 TimeRotatingFileHandler 源码解析

def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):
        BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
        self.when = when.upper()
        self.backupCount = backupCount
        self.utc = utc      
        if self.when == 'S':
            self.interval = 1 # one second
            self.suffix = "%Y-%m-%d_%H-%M-%S"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$"
        elif self.when == 'M':
            self.interval = 60 # one minute
            self.suffix = "%Y-%m-%d_%H-%M"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}$"
        elif self.when == 'H':
            self.interval = 60 * 60 # one hour
            self.suffix = "%Y-%m-%d_%H"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}$"
        elif self.when == 'D' or self.when == 'MIDNIGHT':
            self.interval = 60 * 60 * 24 # one day
            self.suffix = "%Y-%m-%d"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}$"
        elif self.when.startswith('W'):
            self.interval = 60 * 60 * 24 * 7 # one week
            if len(self.when) != 2:
                raise ValueError("You must specify a day for weekly rollover from 0 to 6 (0 is Monday): %s" % self.when)
            if self.when[1] < '0' or self.when[1] > '6':
                raise ValueError("Invalid day specified for weekly rollover: %s" % self.when)
            self.dayOfWeek = int(self.when[1])
            self.suffix = "%Y-%m-%d"
            self.extMatch = r"^\d{4}-\d{2}-\d{2}$"
        else:
            raise ValueError("Invalid rollover interval specified: %s" % self.when)

        self.extMatch = re.compile(self.extMatch)
        self.interval = self.interval * interval # multiply by units requested
        if os.path.exists(filename):
            t = os.stat(filename)[ST_MTIME]
        else:
            t = int(time.time())
        self.rolloverAt = self.computeRollover(t)



 TimedRotatingFileHandler 用法自行百度
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight

self.suffix = "%Y-%m-%d"
self.extMatch = r"^\d{4}-\d{2}-\d{2}$"
······
······
self.extMatch = re.compile(self.extMatch)
认设置when类型后,suffix是固定的,匹配的正则也是源码里写好的,所以当修改suffix后,必须连带正则一并修改

stamp = "dailylog.log"

。。。。

.。。。。。

handler=logging.handlers.TimedRotatingFileHandler(filename=v,when='D', interval=1, backupCount=15)
handler.suffix = "%Y-%m-%d.log"
handler.extMatch = r"^\d{4}-\d{2}-\d{2}.log$"

源码

# coding=utf-8
import logging
import time
import os
import logging.handlers
import re
def logger():
    # def __init__(self):
    #     pass
    log_fmt= "%(asctime)s --%(name)s [%(levelname)s]:\n%(message)s"
    c_fmt="%(asctime)s --%(name)s [%(levelname)s]:\n%(message)s"
    date_format = "%Y-%m-%d %H:%M:%S %a"
    #设置控制台输出level
    logging.basicConfig(  level=logging.DEBUG,
                            format=c_fmt,
                            datefmt=date_format,

                            )

    list_level=["Error","Info","Warning","Debug"]
    stamp = "dailylog.log"
    logsdir=os.path.join(os.getcwd(),"logs")
    if os.path.exists(logsdir):
        for p in list_level:
            if os.path.exists(os.path.join(logsdir,p)):
                pass
            else:
                os.mkdir(os.path.join(logsdir,p))
    else:
        os.mkdir(logsdir)
        list_level=["Error","Info","Warning","Debug"]
        for p in list_level:
             print(os.path.join(logsdir,p))
             os.mkdir(os.path.join(logsdir,p))

    f_dict={}
    for i in list_level:
        filename=os.path.join(logsdir,i,stamp)
        f_dict[i]=filename
    logger= logging.getLogger('SshTest.class')

    for k,v in f_dict.items():
            handler=logging.handlers.TimedRotatingFileHandler(filename=v,when='D', interval=1, backupCount=4)
            handler.suffix = "%Y-%m-%d.log"
            handler.extMatch = r"^\d{4}-\d{2}-\d{2}.log$"
            handler.extMatch = re.compile(handler.extMatch)
            h_fmt=logging.Formatter(log_fmt)
            handler.setFormatter(h_fmt)
            if k==list_level[0]:
                handler.setLevel(logging.ERROR)
            elif k==list_level[1]:
                handler.setLevel(logging.INFO)
            elif k== list_level[2]:
                 handler.setLevel(logging.WARNING)
            else :
                 handler.setLevel(logging.DEBUG)
            logger.addHandler(handler)
    return  logger

if __name__ == "__main__":
        logger=logger()
        while True:
            time.sleep(0.01)
            logger.info("file test")
            logger.debug("bebug test")
            logger.error("error test")
            logger.warning("warning test")

 

https://blog.csdn.net/qgf1099062139/article/details/83619280

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值