小言_互联网的博客

python logging模块日志每天一个文件并删除过期的日志(logging模块)

427人阅读  评论(0)

python logging模块按日期打印日志,并删除过期的日志

logging.basicConfig常用样式

logging.basicConfig(level=logging.DEBUG,
                        format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                        datefmt='%a, %d %b %Y %H:%M:%S',
                        filename='/home/URL/client/test_log.log',
                        filemode='a')
参数名称 参数描述
filename 日志输出到文件的文件名
filemode 文件模式,r[+]、w[+]、a[+]
format 日志输出的格式
datefat 日志附带日期时间的格式
style 格式占位符,默认为 “%” 和 “{}”
level 设置日志输出级别
stream 定义输出流,用来初始化 StreamHandler 对象,不能 filename 参数一起使用,否则会ValueError 异常
handles 定义处理器,用来创建 Handler 对象,不能和 filename 、stream 参数一起使用,否则也会抛出 ValueError 异常

如果要每天生成一个日志文件,保留最近7天的日志文件。

when:是一个字符串,用于描述滚动周期的基本单位,字符串的值及意义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval: 滚动周期,单位有when指定,比如:when=’D’,interval=1,表示每天产生一个日志文件;
backupCount: 表示日志文件的保留个数;

删除日志文件设置:
log_file_handler.suffix = “%Y-%m-%d_%H-%M.log”
log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
suffix和extMatch的格式要相对应,Year-4位,m-2位 以此类推

栗子;

logging.handlers.TimedRotatingFileHandler('all.log', when='midnight', interval=1, backupCount=7, atTime=datetime.time(0, 0, 0, 0))
rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

另一个栗子

import logging
from logging.handlers import TimedRotatingFileHandler
from logging.handlers import RotatingFileHandler

def log_init():
    log_fmt = '%(asctime)s\tFile \"%(filename)s\",line %(lineno)s\t%(levelname)s: %(message)s'
    formatter = logging.Formatter(log_fmt)
    log_file_handler = TimedRotatingFileHandler(filename=LOG_PATH+"thread_", when="D", interval=1, backupCount=7)
    log_file_handler.suffix = "%Y-%m-%d_%H-%M.log"
    log_file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")
    log_file_handler.setFormatter(formatter)
    log_file_handler.setLevel(logging.DEBUG)
    log = logging.getLogger()
    log.addHandler(log_file_handler)
   '''
   程序运行
   '''
   #removeHandler 要放在程序运用打印日志的后面
    log.removeHandler(log_file_handler)()

对对输出日志文件的基本管理,如在日志文件名中加入时间:

import logging, logging.handlers
import time

'''
TimedRotatingFileHandler构造函数声明
class logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
filename    日志文件名前缀
when        日志名变更时间单位
    'S' Seconds
    'M' Minutes
    'H' Hours
    'D' Days
    'W0'-'W6' Weekday (0=Monday)
    'midnight' Roll over at midnight
interval    间隔时间,是指等待N个when单位的时间后,自动重建文件
backupCount 保留日志最大文件数,超过限制,删除最先创建的文件;默认值0,表示不限制。
delay       延迟文件创建,直到第一次调用emit()方法创建日志文件
atTime      在指定的时间(datetime.time格式)创建日志文件。
'''

def test_TimedRotatingFileHandler():
    # 定义日志输出格式
    fmt_str = '%(asctime)s[level-%(levelname)s][%(name)s]:%(message)s'
    # 初始化
    logging.basicConfig()

    # 创建TimedRotatingFileHandler处理对象
    # 间隔5(S)创建新的名称为myLog%Y%m%d_%H%M%S.log的文件,并一直占用myLog文件。
    fileshandle = logging.handlers.TimedRotatingFileHandler('myLog', when='S', interval=5, backupCount=3)
    # 设置日志文件后缀,以当前时间作为日志文件后缀名。
    fileshandle.suffix = "%Y%m%d_%H%M%S.log"
    # 设置日志输出级别和格式
    fileshandle.setLevel(logging.DEBUG)
    formatter = logging.Formatter(fmt_str)
    fileshandle.setFormatter(formatter)
    # 添加到日志处理对象集合
    logging.getLogger('').addHandler(fileshandle)

if __name__ == '__main__':
    test_TimedRotatingFileHandler()

    # 测试在200s内创建文件多个日志文件
    for i in range(0, 100):
        logging.debug("logging.debug")
        logging.info("logging.info")
        logging.warning("logging.warning")
        logging.error("logging.error")


        time.sleep(2)

转载:https://blog.csdn.net/xbean1028/article/details/105991835
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场