如何用Python获取日志文件的最后修改信息?
我刚开始学习Python,想写一个脚本来检查我每天的日志文件,看看有没有错误。
我可以打开这些文件,打印出日志文件最后修改的时间,还能把日志里的错误打印出来。
不过,这些日志里有过去三年的每日信息。我想只读取最后修改日期之后的日志部分(也就是说,我只想要最近一天的错误,而不是过去三年的所有错误)。
这是我目前写的脚本:
import sys, string, os, time
from stat import *
from datetime import datetime
now = datetime.now()
f3 = 'C:\Path\filename.txt'
seconds = os.path.getmtime(f3)
print "Last Date Ran: ", time.strftime('%m/%d/%Y %H:%M:%S' , time.localtime(seconds))
for line in open(f3 , 'r'):
if 'error' in line:
print ">>> " , line
elif 'Error' in line:
print ">>> " , line
elif 'ERROR' in line:
print ">>> " , line
有没有办法做到这一点?我到处找了也没找到解决我问题的方法。请帮帮我。
5 个回答
0
如果你想查看上次运行脚本时出现的错误,可以尝试把上次读取日志文件的位置存储在另一个文件里。下次读取日志文件时,就可以直接从那个位置开始看。
0
如果你能提供更多信息,比如你的日志文件格式,那就太好了。
可以看看 datetime.datetime.strptime
这个方法。里面有你需要的所有内容。
比如:
import os.path
from datetime import datetime
filename = "my.log"
def log_entry_is_interesting(line, reference_time):
date_str = line.split()[0]
date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
return timedelta(current_datetime, date).days > reference_time:
last_time_opened = os.path.getmtime(filename)
with open(filename) as f:
for line in filter(lambda x: log_entry_is_interesting(x, last_time_opened), f):
do_something()
我使用的是 filter()
方法。在Python 3中,这个方法是以生成器的形式实现的,但在Python 2.x中不是。如果你使用的是2.x版本,我建议你使用来自 itertools
模块的 ifilter
。
1
简单来说,不行。更详细的说法是,你要么得进行很多没必要的解析,要么就得在文件外面跟踪一些数据。你可以遍历整个文件,解析日志信息的时间戳,然后只打印出在某个时间之后的内容。不过,如果你的文件里有三年的数据,可能更好的办法是记录下你脚本最后读取的那一行,然后每次打开文件时直接跳到那一行去解析。还有一种选择,如果你能接触到相关的过程,可以修改日志记录的方式;你可以把日志信息复制到第二个文件,每次脚本运行时都刷新这个文件,或者基本上通过第二个文件来缓存日志,让你的脚本负责把日志归档到历史文件里。