如何捕获一小时或更短的日志

时间:2016-04-20 11:56:51

标签: shell unix grep unix-timestamp

我必须创建一个shell脚本,以便每次执行它时都会转到常用的日志文件并进行更新。已经完成的工作是选择所有错误的日志并显示为输出。但是现在我希望这就像是选择日志,这些日志已经过了几分钟而且不再存在。

grep适用于获取时间戳行。但是我该怎么做只获得新数据而不是太旧。

grep -i error log.log |  grep `date +%Y'-'%m'-'%d`

日志文件格式如下:' [YYYY-mm-dd时间戳中的日期] - 生成错误/异常'

任何帮助将不胜感激。提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

这有点棘手。 60分钟前的日期将有助于grep 60分钟前发生的条目,但在此之后无法找到。幸运的是,awk很好用时间戳:

awk -F']' -v limit="[`date -d '60 minutes ago' +'%Y-%m-%d %H:%M:%S'`" '
    BEGIN {IGNORECASE=1} /error/ && $1 > limit' log.log

请注意使用-F']'将分隔符设置为],并在时间戳限制字符串的开头添加[。这意味着awk实际上会比较时间戳,包括其开括号,例如"[2016-04-20 17:55:08",但没关系,它仍然有效。

不喜欢awk?怎么样:

start=`date -d '60 minutes ago' '%Y-%m-%d %H:%M:%S'`
sort -d <(grep -i error log.log) <(echo "[$start") |
  sed -n "/$start/,$p" |
  grep -v "^\[$start$"