python日志模块记录三_日志命名_日志轮转

Python010

python日志模块记录三_日志命名_日志轮转,第1张

日志记录中,我们往往要能看到是什么哪里出错了。可以通过日志名字记录哪里出错了。而日志也需要轮转,一个日志文件不能无限大,也需要备份。所以有了通过日志名的灵活配置,和通过设置handler文件输出调用 logging.handlers.RotatingFileHandler 方法来实现轮转和备份。

my_logging文件如下配置

pyhon的一个函数在执行I/O参数比如文件读写,socket正在等待数据时是不能干其他事情的,包括打日志。如果想让一个文件准备好读写了或者一个socket有数据可以直接接收时让操作系统通知程序的话,可以试试select库

#!/usr/bin/python

# encoding=utf-8

# Filename: monitorLog.py

import os

import signal

import subprocess

import time

 

 

logFile1 = "test1.log"

logFile2 = 'test2.log'

 

#日志文件一般是按天产生,则通过在程序中判断文件的产生日期与当前时间,更换监控的日志文件

#程序只是简单的示例一下,监控test1.log 10秒,转向监控test2.log

def monitorLog(logFile):

    print '监控的日志文件 是%s' % logFile

    # 程序运行10秒,监控另一个日志

    stoptime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + 10))

    popen = subprocess.Popen('tail -f ' + logFile, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    pid = popen.pid

    print('Popen.pid:' + str(pid))

    while True:

        line = popen.stdout.readline().strip()

        # 判断内容是否为空

        if line:

            print(line)

        # 当前时间

        thistime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

        if thistime >= stoptime:

            # 终止子进程

            popen.kill()

            print '杀死subprocess'

            break

    time.sleep(2)

    monitorLog(logFile2)

 

if __name__ == '__main__':

    monitorLog(logFile1)