在开发中,我们经常在代码中添加日志,主要作用是程序在服务器上跑出bug时方便进行问题排查,因为在服务器上不可能像在本地运行程序那样debug,所以日志对于我们非常重要,几乎就是解决问题唯一能依赖的东东。
在查看服务器日志时,经常使用以下几条命令:
tail -300f xxx.log | grep "userId"
tail -300f xxx.log | grep "userId" -B 20 -C 20
tail -300f xxx.log | grep "userId" | grep "hello"
cat xxx.log | grep "userId"
tail是查看文件尾部的内容,由于程序中添加日志是添加在文件尾部的,因此文件尾部的内容一直是最新的 。这个命令适用于动态查看日志内容。
grep 是用来过滤内容的,按行过滤,只要一行日志中的内容包含 “userId” 字符串 ,那么就会打印出来。
| 是Linux的管道,用来重定向输出到下一个命令的输入。
grep的 -B 和 -C 参数 意思为找到含有xx字符串的行,然后打印出此行以及此行向前20行和向后20行。 -300f 意思是看文件尾部的300行。
两次grep就是从第一个grep的输出中再进行一次过滤。
注意:grep 的字符串内容是按照正则表达式进行处理的,因此比如像 . * 这种特殊字符(在正则中),如果想按文本匹配,需要用 \ 进行转义 。看如下例子:
首先我创建了一个文件,名为file ,文件内容为:
hello world . i
am a programmer yes
ok byby
然后执行如下命令:
cat file | grep "."
原意为过滤出包含 . 的那行,但结果如下:
hello world . i
am a programmer yes
ok byby
grep按照正则表达书处理, . 代表任意内容,因此一行中包含任何内容都会被打印出。
为了达到原目的,需要对 . 进行转义:
cat file | grep "\."
结果如下:
hello world . i
达到目的。