一些查找日志的技巧
查看log.log日志文件(实时滚动刷新)
tail -f log.log
通用的查日志方式 ,使用less进入日志文件
比如查看当前目录下的console.log文件
less console.log
# 查找某个关键字, 使用/或者?,其中/是从当前位置往下查找, ?是往上查找
比如 /book 往下查找book关键词,?book往上查找book关键字
用 n 向前查找, N 向后查找
用 b 往前翻页 , f 往后翻页
用 G 跳到文件结尾, g 跳到文件开头
有时候, 我们需要根据名称来查找相关的文件
比如查找名称以console开头的文件,可以使用如下的find命令
find . -name 'console*'
其中.表示从当前目录往下查找, 如果需要全局查找(从根目录开始查找),则使用
find / -name 'console*'
也可以用locate命令, locate命令比find -name 更快, 但是会有延迟更新
locate console
有时候我们需要在多个日志文件中查找某个关键字
可以使用find结合grep
# 从当前目录往下查找, 查找包含字符串 CONFIRM 的文件(文件类型为f表示只查找文件, 而不查找目录), 并打印
# -name 和 -type 参数可以同时使用
下面是从当前目录开始查找全部文件, 并搜索其中带有 CONFIRM 关键字的内容
find . -type f | xargs grep 'CONFIRM'
上面的命令会同时列出文件名和日志信息
如果只想定位文件名(只想知道某个关键字出现在哪个日志文件中), 可以结合 cut 命令
find . -type f -name 'console*' | xargs grep 'CONFIRM' | cut -f1 -d':'
cut 的 -d':' 表示以 : 为分隔符对字符串进行切割, -f1 表示保留切割得到的字符串数组的第一个
加上 uniq 命令对文件名进行去重
find . -type f -name 'console*' | xargs grep 'CONFIRM' | cut -f1 -d':' | uniq
加上 sort 命令对文件名进行排序
find . -type f -name 'console*' | xargs grep 'CONFIRM' | cut -f1 -d':' | uniq | sort
uniq后面还可以跟 -c 参数, 可以计数
如果符合条件的文件数太多, 则可以只列出前n行,比如只列出前10行
find . -type f -name 'console*' | xargs grep 'CONFIRM' | cut -f1 -d':' | uniq | head -n 10
find 默认是递归查找所有文件子目录, 若只希望往下查找一级目录, 可以通过maxdepth 参数来指定
find . -type f -name 'console*' -maxdepth 2
若希望查找不满足某条件, 则可以用not, 进行反向查找
find . -not -name 'console*'
如果要查的日志是压缩文件,需要把 grep 替换成 zgrep
grep 可以增加参数, 比如下面的命令,可以查找console.log文件中出现CONFIRM关键字的上下5行的信息
grep -C 5 'CONFIRM' console.log
统计次数可以使用
wc -l
设置命令别名可以用
alias ll='ls -l'
通常用如下命令即可快速查找包含某一字符串的日志文件(按照日志文件名称排序),假设日志文件放在当前目录的logs目录下
find ./logs/ -name console* | xargs grep '301' | cut -f1 -d ':' | uniq | sort
使用grep查找 大日志文件 中的某个关键字
查看关键字前后5行的内容 grep -C 5 NullPointerException start.log
查看关键字后面5行的内容 grep -A 5 NullPointerException start.log
查看关键字前面5行的内容 grep -B 5 NullPointerException start.log
统计某个关键词的出现次数
-o 表示只输出匹配部分
grep -o FullGC gc.log | wc -l
uniq命令可以用来去重,但只能对相邻的重复元素去重,所以一般将其与sort配套使用,先sort后uniq,比如
cat console.log | grep -o apiName.* | sort | uniq
统计出日志中调用的全部接口(去重)