python实现日志文件的轮转和删除
两种轮询方式
使用logging第三方模块
1.RotatingFileHandler(按照文件大小分割)
hdlr = logging.handlers.RotatingFileHandler(LOG_FILE,maxBytes=1024*1024,backupCount=40)
2.TimedRotatingFileHandler(按照时间间隔分割)
hdlr = logging.handlers.TimedRotatingFileHandler(LOG_FILE,when='M',interval=1,backupCount=40)
参数解释:
interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义的不能因为when而重复.
backupCount 是保留日志个数.默认的0是不会自动删除掉日志,若设10,则在文件的创建过程中库会判断是否有超过这个10,若超过,则会从最先创建的开始删除
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,表示每天产生一个日志文件
实例代码
#!/usr/bin/env python # -*- coding: utf-8 -*- import logging from logging.handlers import TimedRotatingFileHandler class loggerConfig: def __init__(self,logname,logpath,level=logging.INFO,formatter="%(asctime)s - %(name)s - %(levelname)s - %(message)s"): self.logname=logname self.logpath=logpath self.level=level self.formatter=formatter def create_logger(self): logger = logging.getLogger(self.logname) logger.setLevel(level=self.level) # handler = logging.FileHandler(self.logpath) #第三方模块的调用调试入口 #f7 单步进入 进入下一级被调用的函数或者类等 #f8 单步执行 直接跳转到当前指令行的下一行 不进入被调用的下级函数或者类 handler = TimedRotatingFileHandler(filename=self.logpath, when="M", interval=1, backupCount=5) handler.setLevel(self.level) formatter = logging.Formatter(self.formatter) handler.setFormatter(formatter) logger.addHandler(handler) return logger
#!/usr/bin/env python # -*- coding: utf-8 -*- from common import esConfig from common import timetools from common.loggerConfig import loggerConfig import datetime import os import time es = esConfig.es logpath=os.path.abspath('../logs/log.txt') log=loggerConfig("messageSend",logpath) logger=log.create_logger() today=datetime.date.today() indexname="message-send-"+str(today) count = 0 while count<15: #每次调用logger对象向文件写入文本内容的时候都会自动触发日志轮转和删除检测操作函数 logger.error("这里是日志内容 %d" %(count)) time.sleep(5) count = count + 1
调试日志模块
python实现日志文件的顺序读取和倒序读取
1.python默认是按顺序读取的 但是有些情况需要读取带指定内容并且是最后出现的
2.在python如果需要对日志内容进行分析处理的可以通过调用shell程序来处理
#默认是按顺序读取文件内容 for line in open("../data/message_send.db",encoding="utf-8"): if line.startswith("success"): print(line.split("_")) #要取最新的内容必须按照倒序读取 #日志内容通过shell命令操作最合适(倒序 过滤关键字) #python本身不太适合做文本内容操作 res = os.popen("tac ../data/message_send.db | grep 'success' | head -n 1") for re in res.readlines(): print re
#要取最新的内容必须按照倒序读取 #日志内容通过shell命令操作最合适(倒序 过滤关键字) #python本身不太适合做文本内容操作 filename="message_send.db" res = os.popen("tac %s | grep 'success'| head -n 1" %(filename)) con="" for re in res.readlines(): con=re cons=con.split("_") print(cons[1])
fail_2019-11-15 09:51:19,579_此次统计发生异常'total33',还剩9次重试 sueeccess_2019-11-15 11:51:02,523_成功统计0条记录 fail_2019-11-15 10:51:19,579_此次统计发生异常'total33',还剩9次重试 fail_2019-11-15 11:51:19,579_此次统计发生异常'total33',还剩9次重试 fail_2019-11-15 12:51:19,579_此次统计发生异常'total33',还剩9次重试 fail_2019-11-15 09:51:19,579_此次统计发生异常'total33',还剩9次重试 succaaess_2019-11-15 13:51:02,523_成功统计0条记录 success_2019-11-15 14:51:02,523_成功统计0条记录
本文来自博客园,作者:不懂123,转载请注明原文链接:https://www.cnblogs.com/yxh168/articles/11855581.html