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
View Code

 

#要取最新的内容必须按照倒序读取
#日志内容通过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条记录                                             
日志格式

 

posted @ 2019-11-15 15:11  不懂123  阅读(833)  评论(0编辑  收藏  举报