网站404页面模板,网站 名词解释,宁波甬城配网建设有限公司,网站免费推广在业务稳定性要求比较高的情况下#xff0c;运维为能及时发现问题#xff0c;有时需要对应用程序的日志进行实时分析#xff0c;当符合某个条件时就立刻报警#xff0c;而不是被动等待出问题后去解决#xff0c;比如要监控nginx的$request_time和$upstream_response_time时…在业务稳定性要求比较高的情况下运维为能及时发现问题有时需要对应用程序的日志进行实时分析当符合某个条件时就立刻报警而不是被动等待出问题后去解决比如要监控nginx的$request_time和$upstream_response_time时间分析出最耗时的请求然后去改进代码这时就要对日志进行实时分析了发现时间长的语句就要报警出来提醒开发人员要关注当然这是其中一个应用场景通过这种监控方式还可以应用到任何需要判断或分析文件的地方所以今天我们就来看看如何用python实现实时监控文件我给三个方法实例第一种这个是最简单的和容易理解的因为大家都知道linux下有tail命令所以你可以直接用Popen()函数去调用这个命令来执行获取输出代码如下logfileaccess.logcommandtail -f ‘logfile|grep “timeout”‘popensubprocess.Popen(command,stdoutsubprocess.PIPE,stderrsubprocess.PIPE,shellTrue)while True:linepopen.stdout.readline().strip()print line第二种采用python对文件的操作来实现用文件对象的tell(), seek()方法分别得到当前文件位置和要移动到的位置代码如下import timefile open(‘access.log)while 1:where file.tell()line file.readline()if not line:time.sleep(1)file.seek(where)else:print line,第三种利用python的 yield来实现一个生成器函数然后调用这个生成器函数这样当日志文件有变化时就打印新的行代码如下import timedef follow(thefile):thefile.seek(0,2)while True:line thefile.readline()if not line:time.sleep(0.1)continueyield lineif __name__ ‘__main__:logfile open(“access-log”,”r”)loglines follow(logfile)for line in loglines:print line,最后解释下seek()函数的用法这个函数接收2个参数file.seek(off, whence0)从文件中移动off个操作标记(文件指针)正数往结束方向移动负数往开始方向移动。如果设定了whence参数就以whence设定的起始位为准0代表从头开始1代表当前位置2代表文件最末尾位置。以上就是三个常用方法具体日志分析的代码大家可以根据自己的业务逻辑去实现完毕。以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持我们。本文标题: python实现实时监控文件的方法本文地址: http://www.cppcns.com/jiaoben/python/161581.html