如何构建python脚本来解析exim日志文件并生成发送域计数
我想构建一个python脚本,它通过smtp服务器上的exim日志文件进行greps处理,并报告每天、每周和每月大多数发送域的总数。 我对python非常陌生,我正在努力实现这一点 exim日志文件中的相关行通常如下所示:如何构建python脚本来解析exim日志文件并生成发送域计数,python,dictionary,logfiles,exim,Python,Dictionary,Logfiles,Exim,我想构建一个python脚本,它通过smtp服务器上的exim日志文件进行greps处理,并报告每天、每周和每月大多数发送域的总数。 我对python非常陌生,我正在努力实现这一点 exim日志文件中的相关行通常如下所示: Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=sm
Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]
Feb 24 00:00:23 smtp1.mail.net exim[5660]: 2014-02-24 00:00:23 1Wuniq-mail-idSo-Fg -> someuser@somedomain.com R=mail T=remote_smtp H=smtp.mail.net [000.00.34.17]
Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h => someuser@somedomain.com R=mail T=pop_mail_net H=mta.mail.net [000.00.34.6]
Feb 24 00:00:23 smtp1.mail.net exim[5661]: 2014-02-24 00:00:23 1Wuniq-mail-idSm-1h Completed
sys
、os
和re
模块应足以实现这一点(?)。
我还想使用字典,因为我想每天在cron中运行脚本
主要的问题是:如何看我grep槽只相关线?Exim日志很多,我只想grep包含“=>和->”的行。与以“1W”开头的uniq maild ID一起使用。
此外,对于日常脚本运行,脚本必须通过日志文件“尾随”,并且应该从脚本上次执行时停止解析日志文件的最后位置开始。
为了生成可靠的每日发送域计数,这是必要的
非常感谢您的帮助。您可以首先通过以下方式反向读取文件:
logFileData = []
with open( pathToLogFile, "r" ) as logfile:
logFileData = reversed( logfile.readlines() )
然后,您可以从以下位置获取每个日志文件数据的部分:
for line in logFileData:
temp = ""
if '=>' in line:
temp = line.split('=>')
elif '->' in line:
temp = line.split('->')
if temp:
## Get the first substring after splitting at '->/=>';
## From that substring, get the last substring after splitting at all whitespaces.
address = temp[0].split()[-1].strip()
timestampParts = temp[0].split()[:3] #Get each part of the date
timestampString = " ".join( timestampParts )
## Get the last two characters of interest from it.
if address.startswith("1W"):
pass #Replace with your functionality here
有关字符串中的解析时间,请查看python包。另见相关问题
我假设这是一个脚本,这意味着你不能“记得”上次把它放在哪里了。为此,您可以在读取日志文件时编辑日志文件本身,并用一个唯一的符号标记您离开的位置。下次读取时,仅从文件末尾读取符号
编辑:更正了
时间戳
计算这帮了大忙,这正是我需要的输出。谢谢