Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The best way to filter a log by a dates range in python

What's the best way to print log lines that match a datetime range. For example:

I would like to print only lines with dates from: 2012/09/30-00:00:10 to: 2012/09/30-00:00:13

2012/09/30-00:00:08.773 log error
2012/09/30-00:00:09.034 log warning
2012/09/30-00:00:09.352 log info
2012/09/30-00:00:10.526 log info
2012/09/30-00:00:10.995 log warning
2012/09/30-00:00:12.014 log warning
2012/09/30-00:00:18.035 log error
2012/09/30-00:00:21.733 log fatal
2012/09/30-00:00:21.981 log info

It should print:

2012/09/30-00:00:10.526 log line
2012/09/30-00:00:10.995 log line
2012/09/30-00:00:12.014 log line

I would like to do this in a cost-effective way, as I'm using production servers. Python only please. Thanks!

like image 539
erickardus Avatar asked Jan 16 '23 10:01

erickardus


2 Answers

Actullay, the log format allows to compare date strings without their conversion to datetime.

with open('mylog.log','r') as f:
    for line in f:
        d = line.split(" ",1)[0] 
        if d >= '2012/09/30-00:00:10' and d <= '2012/09/30-00:00:13':
            print line
like image 186
Maksym Polshcha Avatar answered Jan 18 '23 22:01

Maksym Polshcha


Assuming you're reading the log line by line:

import re
for line in log:
    if re.match("2012/09/30-00:00:1[0-3]", line):
        print line
like image 35
Tim Pietzcker Avatar answered Jan 18 '23 23:01

Tim Pietzcker