我想将每行的日期与给定日期进行比较。
# Example dump
cat /var/log/auth.log
Mar 5 00:53:43 server012 sshd[15145]: Failed password for XX from X.X.X.X port 59113 ssh2
Mar 5 12:19:20 server012 sshd[17378]: Invalid user XX from X.X.X.X
Mar 5 12:19:20 server012 sshd[17378]: input_userauth_request: invalid user XX [preauth]
Mar 5 12:19:25 server012 sshd[17378]: Failed none for invalid user XX from X.X.X.X port 38485 ssh2
Python的示例:
givenvalue = datetime.strptime("2014-01-04 14:57:33", '%Y-%m-%d %H:%M:%S')
dateFromLog = ....
if givenvalue > dateFromLog
do something
我可以毫不费力地打开日志文件并逐个读取每一行。 我的问题是用于读出日期的正则表达式/编译命令(例如: 3月5日12:19:25 )。谁能帮帮我?
下一个问题是日志文件中缺少的一年。所以我无法“正确”比较日期。我以前的想法是:
我不知道这两个想法中的一个。有没有人有想法?
答案 0 :(得分:0)
您可以像这样使用strptime
:
datetime.strptime(beginningOfLine, '%b %d %H:%M:%S')
这将创建1900年的datetime
个对象,因为没有给出年份。你可能想自己调整一下。
示例:
>>> from datetime import datetime
>>> datetime.strptime('Mar 5 12:19:20', '%b %d %H:%M:%S')
datetime.datetime(1900, 3, 5, 12, 19, 20)
关于您的其他问题:“最后编辑的”日期不一定与您日志中的所有条目同年。
答案 1 :(得分:0)
我没有找到有关如何更改记录日期格式的任何信息,因此我可能有一个新的解决方案:
我编写了一个小型服务/程序,可以实时扫描原始的log.auth文件(如Code Sample: Part 5。
当出现新行时:在新的log.file中复制带有year的行(如own_auth_with_year.log)。 我不喜欢这个选项:还有一项护理服务。解决方案非常不方便。
如果你可以改变时间格式,这可能很容易......
<强>更新强> 有可能的。打开rsyslog.conf文件(/etc/rsyslog.conf)并添加自己的模板,如
# My own a template
$template MySuperAwesomeTimestamps,"%timegenerated:1:10:date-rfc3339% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"
现在将行( auth,authpriv。 /var/log/auth.log*)更改为
auth,authpriv.* /var/log/auth.log;MySuperAwesomeTimestamps
之后保存配置,重启系统(或重新加载服务)并检查新的时间格式( tail -f /var/log/auth.log)