I\'m writing a program that will parse an Apache log file periodically to log it\'s visitors, bandwidth usage, etc..
The problem is, I don\'t want to open the log an
log = open('myfile.log')
pos = open('pos.dat','w')
print log.readline()
pos.write(str(f.tell())
log.close()
pos.close()
log = open('myfile.log')
pos = open('pos.dat')
log.seek(int(pos.readline()))
print log.readline()
Of course you shouldn't use it like that - you should wrap the operations up in functions like save_position(myfile)
and load_position(myfile)
, but the functionality is all there.
If your logfiles fit easily in memory (this is, you have a reasonable rotation policy) you can easily do something like:
log_lines = open('logfile','r').readlines()
last_line = get_last_lineprocessed() #From some persistent storage
last_line = parse_log(log_lines[last_line:])
store_last_lineprocessed(last_line)
If you cannot do this, you can use something like (see accepted answer's use of seek and tell, in case you need to do it with them) Get last n lines of a file with Python, similar to tail