java 开发常用 日志定位,grep 结合使用
最常用查看日志方法:
·实时日志:tail -f XXX.log
·搜索关键字附近日志:cat -n filename | grep -C20 "关键字" 查询关键字的日志(常用!~)
下面详细看下⬇⬇⬇:
查看日志常用命令
tail:
-n 是显示行号;相当于nl命令;例子如下:
tail -100f test.log 实时监控100行日志
tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
head:
跟tail是相反的,tail是看后多少行日志,而head是查看日志文件的头多少行,例子如下:
head -n 10 test.log 查询日志文件中的头10行日志;
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
cat:
tac是倒序查看,是cat单词反写;例子如下:
tac test.log |grep -C20 "关键字"
vim:
1、进入vim编辑模式:vim filename
2、输入“/关键字”,按enter键查找
3、查找下一个,按“n”即可
退出:按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令
wq! 保存退出
q! 不保存退出
一、日志内容特别多,打印在屏幕上不方便查看,分页/保存文件查看 less命令
1:less catalina.out
2:大写字母:F【find的意思,并且其实他正在计算行数】直接到达日志最底部,也就是最新日志
3:ctrl+c【把上面的计算行数运算停止】
4:?要搜索的字符【用通配符?开始查找】如果?不起作用 使用 / 查找
5:键盘上下键来查看 【
2、ps查看进程信息并通过less分页显示
ps -ef |less
3、查看命令历史使用记录并通过less分页显示
history | less
4、浏览多个文件
less log2013.log log2014.log
说明:
输入 :n后,切换到 log2014.log
输入 :p 后,切换到log2013.log
1.全屏导航
- ctrl + F - 向前移动一屏
- ctrl + B - 向后移动一屏
- ctrl + D - 向前移动半屏
- ctrl + U - 向后移动半屏
2.单行导航
- j - 向前移动一行
- k - 向后移动一行
3.其它导航
- G - 移动到最后一行
- g - 移动到第一行
- q / ZZ - 退出 less 命令
4.其它有用的命令
- v - 使用配置的编辑器编辑当前文件
- h - 显示 less 的帮助文档
- &pattern - 仅显示匹配模式的行,而不是整个文件
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
- ma - 使用 a 标记文本的当前位置
- 'a - 导航到标记 a 处
列出几种常见的应用场景⬇⬇⬇:
查看日志应用场景一:按行号查看:过滤出关键字附近的日志
(1) cat -n test.log |grep "debug" 得到关键日志的行号
(2) cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
查看日志应用场景二:根据日期查询日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:
上面的两个日期必须是日志中打印出来的日志,否则无效
先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该时间点
查看日志应用场景三:日志内容特别多,打印在屏幕上不方便查看,分页/保存文件查看
(1)使用less命令,
如: cat -n test.log |grep "debug" |less 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析
如:cat -n test.log |grep "debug" >debug.txt
grep 查日志基本语法
1.基本语法
grep [参数] 关键字 文件
参数选项:
-n 结果显示行号
-c 关键字匹配的行次数
-i 关键字忽略大小写
-v 反向选择
-e 后跟一个正则表达式
-m10 查找到10次就停止继续查找
-A10 显示关键字所在行和后10行
-B10 显示关键字所在行和前10行
-C10 显示关键字所在行和前后10行
--color=auto 关键字高亮显示(多个参数一起使用,color属性需要放最后,注意是两个短线)
grep 可以跟正则,详细信息
grep -n t[ea]st info.log 查询test或者tast ([]一个字符)
grep -n [^g]oo 查询oo但不包含goo的行 (^在[]内表示反向选择)
grep -n [^a-z]oo 查询oo但不包含小写字母+oo的行 ([a-z] 一个小写字母)
grep -n [0-9] 查询包含数字的行 ([0-9] 一个数字)
grep -n ^the 查询the开头的行 (^不在[]内表示定位到行首)
grep -n [a-zA-Z] 查询不是以字母开头的行 (^反向和定位)
grep -n .$ 查询以.结尾的行 (\转义 $结尾)
grep -n ^$ 找出空白行 (^$ 空白行)
grep -n g..d 查询g??d的字符串的行(.表示一个)
grep -n ooo* 查询至少包含两个oo的行(* 表示重复前边一个字符0-n次)
grep -n goog 查询g开头g结尾且中间至少包含一个o的行
grep -n g.g 查询g开头g结尾且中间字符可有可无的行 (.*表示没有或有任意个字符)
grep -n o{2} 查询oo的行({2} 前边字符重复2次,{}转义)
2.多关键字grep
多条件或
grep -E '关键字1|关键字2|关键字3' info.log
匹配关键字1或关键字2或关键字3到任意一个,展示该行
多条件与
grep '关键字1' info.log | grep '关键字2' | grep '关键字3'
匹配到关键字1和关键字2和关键字3全部,展示该行
3.多文件grep
当前目录下grep文件
grep 关键字 *
当前目录下grep文件夹以及文件夹下所有文件(递归)
grep -r 关键字 *
3.demo
在info.log 模糊查询关键字(订单号:5a8f4709db9d493b),并显示匹配行上下10行,以及行号
grep -n -C10 '订单号:5a8f4709db9d493b' info.log