日常出bug上机器去查看日志。日志怎么查看?
- 直接
cat console.log
吗,那得找到什么时候啊? -
vim console.log
吗,我想根据某个关键字来查怎么在vim上操作啊?(‘ / ’+关键字) 如果log
文件太大了,vim打开太卡了怎么搞啊...
所以,常用Linux命令还是得学学的呀
Log位置:
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
常用命令:
1. tail
参数:
tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
File 指定操作的目标文件名称
上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部開始计算。
tail可运行文件一般在/usr/bin/以下。
实例:
1、tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。
2、tail -n 20 filename
说明:显示filename最后20行。
3、tail -r -n 10 filename
说明:逆序显示filename最后10行。
4.业务系统访问量不是很大的时候,使用这个,有bug的地方操作下,直接看最后操作的日志,就是你刚才操作的地方,好好查bug吧
tail -fn100 catalina.log 查询日志尾部最后100行的日志,并且随文件;
2. head
(head 仅仅显示前面几行 )
head -n 10 test.log 查询日志文件中的头10行日志;查看服务器启动情况,服务器启动报错,直接看前n行即可
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;
3. grep
grep [options]
主要参数:
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
<:从匹配正则表达 式的行开始。
>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
- :有字符,长度可以为0。
按照关键字查找日志 (知道程序出问题的模块,而且有日志关键字的可以用此方法)
<1>.找到产生错误异常的行号
比如我们日志中关键字error表示错误
grep "error" -n filename.log
或者cat -n filename.log |grep "error"
4.sed
用sed命令
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。
5. cat
cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2
把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3
把test.txt文件扔进垃圾箱,赋空值test.txt
cat /dev/null > /etc/test.txt
注意:>意思是创建,>>是追加。千万不要弄混了。
6. tac (反向列示)
tac 是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由第一行到最后一行连续显示在萤幕上, 而 tac 则是由最后一行到第一行反向在萤幕上显示出来!
常用命令实战:
A. tail filename.log -n 300 -f
查看底部即最新300条日志记录,并实时刷新
B. grep 'nick' | tail filename.log -C 10
查看字符‘nick’前后10条日志记录, 大写C
C.这时候就会显示很多匹配的行数,然后找到大约发生错误时间的对应行号
通过行号查询对应行前后的内容
例如:得到"error"关键字所在的行号是102行. 此时如果我想查看这个关键字前10行和后10行的日志:
cat -n filename.log |tail -n +92|head -n 20
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
或者 sed -n "92,112p" filename.log
sed -n "开始行,结束行p" 文件名 查看文件多少行到多少行内容
D. 通过时间查找 (不知道程序那里出问题了,只知道出问题的时间)
查询一个时间字符串是否存在
grep “2017-06-21 10:00” test.log
查询时间段内的日志
sed -n '/2017-06-21 09:25:55/,/2017-06-21 14:25:55/p' access.log
这个方法网上都说这个搞,但实际上我实践的时候不能查出来什么,不知道为什么,如果不行只能查时间字符串
grep "2017-06-21 09:25:55" -n access.log
cat -n test.log |grep "error" |more
E. 查询日志结果如果太多可以分页到导出文件
<1>使用more和less命令, 如: cat -n test.log |grep "error" |more 这样就分页打印了,通过点击空格键翻页
<2>使用 >look.txt 将其保存到文件中,到时可以拉下这个文件分析.如:
cat -n test.log |grep "地形" >look.txt
F. 日志管理工具,以上方式只能解决服务器单节点问题,多节点日志分析不建议在服务器上一个个节点去查看,通常简单的是运维定时合并同一业务类型日志到某一个目录
同时也有一些开源的日志管理软件可以帮你管理日志,很简单的帮你实现分析,搜索
如开源的Graylog 2 Logstash Sumo Logic 收费的 Splunk 等
参考:
1.liunx下查看日志最实用命令和方法
2. Linux查看日志命令