如何捕获一小时或更短时间内的日志
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$"
我必须制作一个 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$"