Linux 查找日志技巧

1,026 阅读2分钟

一、截取时间段

场景1:
截取 2019-06-25 10:10 到 2019-06-25 10:20 之间的日志记录,apollo-service.log 为你要截取的文件名称, new2.log 截取之后保存日志的文件名称。

sed -n '/2019-06-25 10:10/, /2019-06-25 10:20/p' catalina.out  > new1.log
sed -n '/2019-06-25 10:20:47/, /2019-06-25 10:26:47/p' catalina.out  > new2.log
sed -n '/2019-06-25 10:20:47.728/, /2019-06-25 10:26:47.728/p' catalina.out  > new3.log

场景2:
我要查shop-bussiness.log.2018-11-06文件中2018年11月6号11:34至11点37之间的日志信息,可以这么做:

grep   '2018-Nov-06 11:3[4-7]' shop-bussiness.log.2018-11-06

二、截取行数

取 catalina.out 文件中的100 - 500 行的日志, new.log 为截取保存之后的文件。

 sed -n '100,500'p apollo-service.log > new.log

三、查看前后 N 行的日志

tail  -n  10  test.log   查询日志尾部最后10行的日志;
tail -n +10 test.log    查询10行之后的所有日志;
head -n 10  test.log   查询日志文件中的头10行日志;
head -n -10  test.log   查询日志文件除了最后10行的其他所有日志;

场景1:
按行号查看---过滤出关键字附近的日志

cat -n test.log |grep "地形"
cat -n test.log |tail -n +92|head -n 20

tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录

四、查看gzip压缩日志文件的命令

# 自动解压文件,并将其中文件内容输出
$ zcat applogs.tar.gz

# 自动解压文件,并在其中搜索,用法和grep类似
$ zgrep -a 'error' applogs.tar.gz

五、查看zip压缩日志文件的命令

# zipinfo查看zip文件包含哪些文件
$ zipinfo applogs.zip
Archive:  applogs.zip
Zip file size: 9573195 bytes, number of entries: 140
drwxrwxrwx  3.0 unx        0 bx stor 22-Sep-17 12:58 applogs/
-rwxrwxrwx  3.0 unx    99166 tx defN 22-Sep-16 18:20 applogs/demo.2022-09-16.0.log
-rwxrwxrwx  3.0 unx 13177092 tx defN 22-Sep-17 13:37 applogs/demo.2022-09-17.0.log
-rwxrwxrwx  3.0 unx      948 tx defN 22-Aug-09 15:08 applogs/demo.log
...
140 files, 203039002 bytes uncompressed, 9546235 bytes compressed:  95.3%

# zipgrep自动解压文件,并在其中搜索,用法和grep类似
$ zipgrep 'error' applogs.zip

六、查看jar文件的命令

目前,绝大多数java项目都是基于spingboot的,众所周知,spingboot会将项目打包成单个jar文件来部署,但其实jar文件本质上就是zip格式,它相比zip文件只是多了一个META-INF/MANIFEST.MF文件而已,如下:

而很多时候,我们需要确认下jar文件里面的内容,比如我想看一下app.jar里被spingboot内嵌的tomcat的线程池配置大小,可如下查看:

$ zipgrep 'max-thread' app.jar 
BOOT-INF/classes/application.yml:    max-threads: 500