Python - 后缀日志的最后一小时

时间:2015-09-04 15:04:15

标签: python bash

我正在寻找一种有效的方法来获取postfix创建的maillog日志文件的过去一小时。我想在python或bash中这样做。

到目前为止,我已经提取了后缀日志中保存的月份和日期:

now_m = today.ctime().split()[1]
now_d = int(today.ctime().split()[2])

但我被困在这里需要一些新想法。

非常感谢任何帮助。

代码示例:

Apr  2 11:53:15 server01 postfix/bounce[9177]: 62A347FB99: sender non-delivery notification: 6F4B67FB97
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 5E9B07FB95: removed
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 62A347FB99: removed
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 6F5837FB98: from=<>, size=4054, nrcpt=1 (queue active)
Apr  2 11:53:15 server01 postfix/bounce[9182]: 652D67FB9D: sender non-delivery notification: 6F5837FB98
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 652D67FB9D: removed
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 6EE717FB92: from=<>, size=4926, nrcpt=1 (queue active)
Apr  2 11:53:15 server01 postfix/qmgr[8140]: 6F4B67FB97: from=<>, size=3448, nrcpt=1 (queue active)
Apr  2 11:53:15 server01 postfix/smtpd[9163]: disconnect from unknown[10.0.0.4]

和另一个例子:

Aug 30 09:00:56 server01 postfix/qmgr[2321]: 1654A7FB86: removed
Aug 30 09:01:57 server01 postfix/smtpd[4320]: connect from unknown[10.0.0.0]
Aug 30 09:01:57 server01 postfix/smtpd[4320]: disconnect from unknown[10.0.0.0]
Aug 30 09:02:16 server01 postfix/smtpd[4320]: connect from unknown[10.0.0.0]
Aug 30 09:02:16 server01 postfix/smtpd[4320]: 21F077FB86: client=unknown[10.0.0.0]

2 个答案:

答案 0 :(得分:1)

很简单:

NOW=`date +%s`; THEN=`expr $NOW - 3600`; until (("$THEN" > "$NOW")); do DATE=`date -d @\$THEN +'%b %e %k:%M:%S'`; grep -e "^$DATE" /var/log/maillog && sed -n -e "/^$DATE/,\$p" /var/log/maillog && break; THEN=`expr $THEN + 1`; done

换句话说:

1)获取当前时间$ NOW

2)一小时前得到时间$ THEN

3)如果有一行以$ THEN开头,则打印该行及其后的所有内容(并打破周期)

4)将$ THEN递增1秒并重复直至$ NOW(或直到找到某些东西)

效率不高,速度不是很快,但很可能对你有用。

答案 1 :(得分:0)

基本跟踪是读取每一行,并将其时间戳解析为datetime.datetime对象。有几种方法可以做到这一点,例如使用.fromtimestamp(静态)方法。或者更一般的解析器(见utile)

然后使用datetime.datetime.now()并减去datetime.timedelta(mins=60);结果可以与解析的时间戳进行比较。

就这么简单! 无需做任何手册,工作。

PS下次添加日志文件/行的示例。我们可以给出具体的示例代码