python读取log文件_python实时处理log文件脚本

#!/usr/local/bin/python3.5

###Destription: 实时读取log信息

###Author: Danny Deng

###Datetime: 2016-11-17

import re,time,subprocess,os,linecache

###############定义log文件

file_name = "/var/log/mongodb/mongodb.log"

file_number = "/usr/local/zabbix_agent/number.txt"

j = int(0)

seek = int(0)

###############判断文件是否存在---判断number是否存在---判断number size 与 filesize

###############定义一个函数,遍历文件

def readline():

###############if判断 seek是否大于0,大于则赋值,否则初始为0

while True:

###############定义文件,根据seek值进行每行读取,每次tell赋值给seek

with open(file_name,'r') as f:

global seek

#seek = seek

f.seek(seek)

data = f.readline()

if data:

seek = f.tell()

yield data

else:

###############Python变量转换为shell变量

global file_number

os.environ['seek'] = str(seek)

os.environ['file_number'] = str(file_number)

###############记录上一次执行后的seek值,下次执行直接读取

os.system('echo $seek > $file_number')

os.system('chown zabbix.zabbix $file_number')

return

###############定义函数,find特定字符串从每行数据中

def func_for():

j = int(0)

for i in readline():

f_find = re.findall(r"error", i,flags=re.IGNORECASE)

if "error" in f_find:

j += 1

###############没有输出0,有值输出出现error匹配到的次数值

try:

print(j)

except NameError:

print(int("0"))

###############判断文件是否存在

if os.path.isfile(file_name):

###############判断存储seek的文件是否存在

if os.path.isfile(file_number):

###############存在时,读取其seek值

seek_number = int(linecache.getline(file_number, 1))

###############如果有值判断seek值与现在文件大小值,大于说明log文件已重新生成,重置seek值为0

if os.path.getsize(file_name) >= seek_number and seek_number > 0:

seek = seek_number

func_for()

else:

seek = int(0)

func_for()

###############如果存储seek值的文件不存在,新建并出示seek值为0

else:

os.environ['file_number'] = str(file_number)

os.system('echo 0 > $file_number')

os.system('chown zabbix.zabbix $file_number')

func_for()

###############文件不存在 报错

else:

print("Error")

quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值