Python实现定时轮询实时日志并分段归档的程序

半杯拿铁
半杯拿铁
发布时间:2026-10-13 | 5人浏览过
原创

本文介绍了一个使用Python编写的定时读取实时日志文件的程序。该脚本以5秒为周期轮询目标日志文件,利用fileinput模块高效读取内容,并根据日志行数变化判断是否发生文件重置。程序将新提取的日志按IP和时间戳生成独立的归档文件,适用于需要持续监控并分段保存应用日志的场景。

本文分享了一个使用Python编写的定时提取实时日志的具体代码实现,供读者参考学习。

该程序的核心功能是定时读取实时生成的日志文件,目标文件由应用程序持续写入。

程序设定每5秒执行一次提取操作,将日志内容处理后生成独立的归档文件,最终实现所有日志文件的汇总管理。

#!/usr/local/bin/python 
# coding:utf-8 
 
import fileinput 
import time 
import os 
 
target_file = 'user.log' 
init_flag = True # 初次加载程序 
time_kick = 5 
 
record_count = 0 
 
while True: 
 print '当前读到了', record_count 
 #没有日志文件,等待 
 if not os.path.exists(target_file): 
 print 'target_file not exist' 
 time.sleep(time_kick) 
 continue 
 
 try: 
 ip = '10.10.1.100' 
 easytime = time.strftime('%Y%m%d_%H%M%S', time.localtime()) 
 file_name = '%s_user_%s.log' % (ip,easytime) 
 f_w = open(file_name, 'w') 
 if init_flag: 
  #读取整个文件 
  for eachline in fileinput.input(target_file): 
  print eachline 
  f_w.write(eachline) 
  record_count += 1 
 
  init_flag = False 
 else: 
  #如果总行数小于当前行,那么认为文件更新了,从第一行开始读。 
  total_count = os.popen('wc -l %s' % target_file).read().split()[0] 
  total_count = int(total_count) 
  if total_count < record_count: 
  record_count = 0 
 
  for eachline in fileinput.input(target_file): 
  line_no = fileinput.filelineno() 
  if line_no > record_count: 
   print eachline 
   f_w.write(eachline) 
   record_count += 1 
 
 f_w.close() 
 except: 
 pass 
 time.sleep(time_kick) 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表