我记录两个日期之间的日志

时间:2014-04-07 06:06:53

标签: shell unix logging

我正在尝试从大日志中获取两个特定日期之间的日志。

我的日志格式是

[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFactory.createSubject(71) | HTTP Session id: B37D367C02B5411489152F5EF4D740B3
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFactory.createSubject(79) | Subject Context is associated to principal: None
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFactory.createSubject(85) | Created new subject instance for user null
[EFMS]  DEBUG [07 Apr 2014 11:07:35,228]  LoginController.login(53) | Login page requested
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(71) | HTTP Session id: B37D367C02B5411489152F5EF4D740B3
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(79) | Subject Context is associated to principal: None
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFactory.createSubject(85) | Created new subject instance for user null

我正在尝试这种方式

  

sed -n'/ [EFMS] DEBUG [06 Apr 2014 00:00:00 /,/ [EFMS] DEBUG [2014年4月7日00:00:00 / p'catalina.logs

它无法正常工作,请你帮帮我。

3 个答案:

答案 0 :(得分:2)

您不需要sed,需要grep。除此之外,您的查询过于复杂,如果您需要在6日发生的事件,您只能搜索第6个:

grep "06 Apr 2014" catalina.logs

如果您需要指定更长的天数,可以使用正则表达式来执行此操作,例如:

grep "[1-3][0-9] Mar 2014" catalina.logs

将搜索三月份的所有参赛作品。

答案 1 :(得分:1)

无法将时间戳解析为时间秒并找到范围,这是一种简单的解析时间戳的方法。如果你只是在寻找一整天的时间,你可以这样做:

sed -n '/06 Apr 2014/,/07 Apr 2014/p' catalina.logs

您需要转义[]等元字符。如果它们不存在于您的日志中,那么整个时间戳也可能不起作用。

答案 2 :(得分:0)

如果您想要任意日期范围,可以使用以下awk脚本执行此操作:

{
    mm = (index ("JanFebMarAprMayJunJulAugSepOctNovDec", $4) + 2) / 3;
    if (mm < 10) { mm = "0"mm; };

    dd = $3;
    gsub (/\[/, "", dd);

    date = $5"-"mm"-"dd;

    if ((date >= from) && (date <= to)) { print; };
}

它的工作原理是将日期转换为正确的比较格式(yyyy-mm-dd),并且只打印命令行上给出的日期之间的行。

下面是一个成绩单,其中只能看到fromto之间的日期(由于第一行和最后一行超出了所需的范围而被删除):

pax> cat input.txt
[EFMS]  DEBUG [05 Feb 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [06 Mar 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,228]  LoginController.l...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 May 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Aug 2014 11:07:35,225]  EfmsWebSubjectFac...

pax> awk -vfrom=2014-03-01 -vto=2014-05-08 -f filter.awk input.txt
[EFMS]  DEBUG [06 Mar 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,225]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,226]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:35,228]  LoginController.l...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 Apr 2014 11:07:42,636]  EfmsWebSubjectFac...
[EFMS]  DEBUG [07 May 2014 11:07:35,225]  EfmsWebSubjectFac...