python实时过滤日志脚本

大神指导作品:

#!/usr/bin/python
#coding:utf8

from functools import wraps
from time import sleep
import os

RESTART=‘pm2 restart ios-push‘

# coroutine 先要用 next 语句调用一次
def coroutine(fn):
    @wraps(fn)
    def wrapper(*args,**kwargs):
        ret=fn(*args,**kwargs)
        next(ret)
        return ret
    return wrapper

def follow(file,target):
    ‘‘‘
    类似 Unix 的 tail -f, 但是接受一个 target, 有新的数据,交给 target 处理
    ‘‘‘
    file.seek(0,2)# 直接到文件的最后一行,类似 tail -f -n 0
    while True:
        line=file.readline()#读取行
        if not line:
            sleep(0.5)# 如果是空行,直接 sleep 0.5s,然后 continue
            continue
        target.send(line)# 如果有新数据,则交给 target 处理

def action():
   if os.system(RESTART) == 0:
       print(‘ios-push restart success!‘)
    #print(‘restart‘)

@coroutine
def grep(pattern):
     ‘‘‘
    grep 是一个 coroutine,接受一个 pattern 参数,需要从外部 send 数据 ,如果接受的数据匹配 pattern 通过了,则调用action函数
    ‘‘‘
    while True:
        line = yield
        if pattern in line:
            action()
if __name__ == ‘__main__‘:
    follow(open(‘error.log‘,‘r‘),grep(‘MaxListenersExceededWarn‘))

时间: 2024-08-01 16:46:44

python实时过滤日志脚本的相关文章

python切割nginx日志脚本

#!/usr/bin/env python #-*-coding:utf-8-*- #Python nginx cut log 1 import subprocess def mkdir(): subprocess.call('mkdir -pv /usr/local/nginx/logs/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/',shell=Tru

python 实时遍历日志文件

open 遍历一个大日志文件 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readline(),因为前者的循环在C语言层面,而使用readline() 的循环是在Python语言层面. 但是 readlines() 会一次性把全部数据读到内存中,内存占用率会过高,readline() 每次只读一行,对于读取 大文件, 需要做出取舍. 如果不需要使用 seek() 定位偏移, for line in open('fi

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 + shell将脚本直接启动到后

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 的测试代码 如果用python写好一个有定时器的脚本后,如果脚本里还读了配置文件,那么配置文件路径如果写死的话,有一天要换了存放目录的话,需要修改脚本的配置文件路径,而且每次都要到脚本所在路径用 nohup 启动到后台很麻烦.用 os.path.split(os.path.realpath(sys.argv[0]))[0] 来获取文件所在的绝对路径,配置文件同样扔到和它同级,这样就可以在任意地方启动,一劳永逸~~~ 此用法站在运

nohup 后台运行脚本,且可以实时查看日志

-u加在python上 python命令加上-u(unbuffered)参数后会强制其标准输出也同标准错误一样不通过缓存直接打印到屏幕. 这是因为python的缓存机制所决定的 如果是使用 nohup python abc.py > nohup.log 2>&1 & 的话,可以将日志写入到nohup.log文件,但是没法实时用tail -f nohup.log来查看日志. 解决方法:nohup python -u abc.py > nohup.log 2>&

实时海量日志分析系统的架构设计、实现以及思考

1 序 对ETL系统中数据转换和存储操作的相关日志进行记录以及实时分析有助于我们更好的观察和监控ETL系统的相关指标(如单位时间某些操作的处理时间),发现系统中出现的缺陷和性能瓶颈. 由于需要对日志进行实时分析,所以Storm是我们想到的首个框架.Storm是一个分布式实时计算系统,它可以很好的处理流式数据.利用storm我们几乎可以直接实现一个日志分析系统,但是将日志分析系统进行模块化设计可以收到更好的效果.模块化的设计至少有两方面的优点: 模块化设计可以使功能更加清晰.整个日志分析系统可以分

python常用运维脚本实例【转】

file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先open是内置函数,使用方式是open('file_name', mode, buffering),返回值也是一个file对象,同样,以写模式打开文件如果不存在也会被创建一个新的. f=open('/tmp/hello','w') #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,

python高效解析日志入库

python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如全部文件内容,可能内存不够.采取一个折中的办法,每次读若干byte(具体大小视实际情况而定). 经过测试,得到结论,在我们写代码的时候应该这样写 f = open(path,'r') for line in f : ............. 这是系统提供的一种读文件的方法,一般比我们自己每次读若干

centos记录uptime,tomcat日志切割,远程拷贝日志脚本

1.uptime日志脚本(每天记录) #!/bin/sh dir=/tmp/uptime_log process=`ps -ef|grep $0|grep -v "grep" |grep -v "vim"|grep -v "ps"|wc -l` if [ $process -gt 2 ];then echo $process exit; fi if [ ! -d $dir ];then mkdir -p $dir; fi while true d

zabbix监控windows日志脚本

zabbix监控windows日志脚本     脚本用于监控windows服务器上日志,查看日志文件的末尾N行,如果N行中包含某字段,则输出0,否则输出1,然后再zabbix的配置文件空定义kye,进行监控. 文本文件的换行符是"\n" 编辑脚本log.py import sys import re def last_lines(filename, lines = 1):     lines = int(lines)     block_size = 1024     block =