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

How to capture logs which are one hour old or less

我必须制作一个 shell 脚本,这样每次执行它时都会转到通用的日志文件并进行更新。已经在做的是挑选所有错误的日志并显示为输出。但现在我希望这就像它选择几分钟前的日志一样。

grep 非常适合获取时间戳行。但是我该怎么做才能只获取新数据而不是太旧。

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

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

如有任何帮助,我们将不胜感激。提前谢谢大家。

这有点棘手。 60 分钟前的日期有助于 grep 查找恰好 60 分钟前发生的条目,但无助于查找 60 分钟后的内容。幸运的是,awk 可以处理时间戳:

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