这是我的日志格式:
from stop_words import get_stop_words
我使用它来获取最后x分钟日志:
127.0.0.1 user-identifier test [23/Jan/2018:16:45:22 -0700] [WARN ] message
127.0.0.1 user-identifier test [23/Jan/2018:16:55:23 -0700] [WARN ] message
127.0.0.1 user-identifier test [23/Jan/2018:17:00:24 -0700] [WARN ] message
但是,它似乎不起作用,因为我的日志不是以日期开头的。我的日志格式应该如何?感谢
答案 0 :(得分:2)
最简单的解决方案我可以看到这将解析您的日志,实时,添加一个新的日期字段,它与简单的算术比较更兼容。例如,始终保持以下运行:
tail -0F /path/to/logfile | while read line; do
[[ $line =~ ^([^[]+\[)([^]]+)(.*) ]]
printf '%s %s%s%s\n' \
$(date -j -f '%d/%b/%Y:%T %z' "${BASH_REMATCH[2]}" '+%s') \
"${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
done >> /path/to/epochlogfile
请注意,我正在使用BSD date
,因此我可以使用-f
控制输入日期格式。您似乎正在使用GNU coreutils的日期命令,因此您需要弄清楚如何调整选项以适应。也许是这样的事情:
tail -0F /path/to/logfile | while read line; do
[[ $line =~ ^([^[]+\[)([^]]+)(.*) ]]
printf '%s %s%s%s\n' \
$(d="${BASH_REMATCH[2]}"; d="${d/:/ }"; d="${d//\// }"; date -d "$d" '+%s') \
"${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
done >> /path/to/epochlog
如果awk
为GNU awk,您可以选择假设tail -F
将始终在时间戳引用的同时输出日志条目。在这种情况下,您不需要解析日期,您可以通过以下方式简化:
tail -0F /path/to/logfile | gawk '{print systime(),$0}' >> /path/to/epochlog
systime()
函数是一个gawk扩展,它返回当前的纪元秒。重申一下,这些时间将反映日志条目到达tail
命令时的,而不是应用程序记录的时间。
当然,比让它保持运行更好的方法是首先使用可搜索的日期创建日志。您还没有说明创建此日志的内容,因此我无法在该区域提出任何具体建议。
获得替换日志文件后,您可以使用以下内容进行搜索:
#!/usr/bin/env bash
case $(uname -s) in
Linux) date_opts=( --date="-60 min" ) ;;
*BSD|Darwin) date_opts=( -v-60M ) ;;
*) echo "No."; exit 1 ;;
esac
start=$(date "${date_opts[@]}" '+%s')
awk -v start="$start" '$1 > start' /path/to/epochlogfile
我跳过你的d2
日期条件,因为现在就是这样。并且没有理由这个搜索脚本需要bash,它可能足够容易POSIX。我只是懒惰。到目前为止,您可能已经理解了这一点,如果它对您很重要,可以再次添加它。
免责声明:未经测试。因人而异。可能含有坚果。
答案 1 :(得分:2)
如果您在生成日志的whatevers中运行与TZ相同的脚本,那么您只需要:
$ cat tst.awk
BEGIN { FS="[[ /:]+" }
{
mthNr = (index("JanFebMarAprMayJunJulAugSepOctNovDec",$5)+2)/3
time = sprintf("%04d%02d%02d%02d%02d%02d", $6, mthNr, $4, $7, $8, $9)
}
time > tgt
适用于任何awk
,您可以执行:
awk -v tgt="$(date --date='-60 min' +'%Y%m%d%H%M%S')" -f tst.awk
使用您已经使用的date
版本支持这些参数。