1. 思路
首先是根据代码中输出的某个关键字来定位日志文件所在的位置,然后查询该位置及其下面的日志输出
2. 使用tail+grep命令实现
tail -1000 xx.log | grep -n -B 2 '日志关键字'
grep 的-n是展示行号,-B是输出匹配行之前的几行
到此日志就查询出来了,结束。下面是一些扩展
3. 查看日志时,按行正则提取字符串
如果日志打印的是这个样子的:
但是我只关注该日志的时间和temperature对应的值,换句话说我想展示出来这个样子的:
2022-10-10 06:45:25.066-----"temperature":"25"
那么转换一下,使用awk命令
awk '$0 ~ /执行完毕/ match($0,/(.{30}).*(temperature":"[0-9]+).*/,arr) {print arr[1],arr[2]}' info.web-base.8083.log
具体的awk命令用法自行百度吧,以下是一个参考模板
awk -F " " '$0 ~ /正则表达式,注意不支持\d\s\n/ match($0,/正则/,a){print a[1],$1}'
4. 查询k8s的日志方式
大同小异,和上面一样,只不过k8s是输入命令不指定日志文件查询而已,如下参考:
- 查询最近2小时日志
kubectl logs --since=2h
- 查询实时日志从现在开始
kubectl logs --tail=1 -f
5. 使用wak删除非当前文件名字文件
rm -f ` ls -t | awk -F. 'BEGIN {k="aaa";print "删除文件开始"} NR==1 {k = $(NF-1) } { if (!($0 ~ k)){ print $0,k}}'`