日常工作中不管是前端、后端还是测试,其实我们都离不开日志,尤其对于后端来说日志更加重要,代码中合理地打印日志,能极大地提高我们定位和排查问题的效率。
前端平时更多关注界面上的东西,习惯直接F12在控制台 network 中查看接口响应的数据,或者通过 console 来直接打印前端代码中的日志,所以也导致即使工作了几年还不会登录到服务器上查看日志。我以前也经历过这样的阶段,那个时候看见别的前端在小黑窗里敲了几个字母就能查看日志感觉好厉害。
测试跟前端一样平时很少会接触日志,大部分场景是开发中或者线上应用有异常,前后端在那互相甩锅对方的问题,然后后端扯着嗓子喊:再点一下我看下日志...然后就是两眼冒火星子对着前端一通输出:特么少传了个参数!特么数据类型不对!特么参数传得不对...
从上面的场景也能看出不管前端后端测试,其实都应该熟练掌握查看日志的技巧,因为确实能在工作中提升我们发现和解决问题的效率,很多时候出现异常我们并不知道到底是前端还是后端的问题,而日志能快速帮我们缩小范围甚至直接能从日志中找到解决问题的方案。
# 日志是什么?
在计算机科学和编程中,日志 log 是指记录程序运行过程中重要信息的一种方式,可以用来记录程序的运行信息、错误信息、警告信息以及一些调试信息,主要用于追踪程序的执行状况、定位问题和调试代码。
日志我们会记录到后缀为 .log 的日志文件中,如 app.log、error.log,它本质也是一种文本文件,和我们常用的 .txt 文档文件没有本质区别,也是可以直接用电脑中自带的记事本打开查看的。
# 日志分级
日常开发中我们常用的日志主要有如下4级:
一般我们只需要关注 info 和 error 级别的日志,这两个也是我们平时接触和用得最多的。
# 查看日志的工具
日志记录在服务器上,所以我们一般需要借助一些第三方工具来登录到服务器上查看,如:xShell、Tabby,推荐使用免费开源的 Tabby。
有的公司有提供查看日志和网页平台这种,很多大点的公司为了安全和权限控制也是有自己的登录服务器的工具,不过用法和 Tabby 这类工具大同小异。
# 日志文件记录在哪里?
一般后端服务会在 /data/${各个服务} 目录下,日志会记录在服务里面的 log 目录里,比如 cafe-user 微服务下面实时日志 cafe-user.log;也有的会有一个 logs 目录,里面再分各个服务分别记录,具体要看是怎么部署的。
# 查看日志的命令
一般服务都会选择 linux 系统,常用的查看日志命令:
cat
用于查看整个日志文件的内容:
# 查看日志文件的全部内容
cat ./app.log
tail
用于查看日志文件的末尾部分,常用于实时监控日志更新,常用参数包括-f(跟踪模式),-n(显示行数,默认10行):
# 动态查看实时输出的日志信息
tail -f ./app.log
# 查看日志文件的最后20行
tail -n 20 ./app.log
# 动态查看包含关键字的日志
tail -f ./app.log | grep "cafehaus"
head
与tail相反,用于查看文件的前若干行,常用参数包括-n(显示行数,默认10行):
# 查看日志文件的前20行
head -n 20 ./app.log
less
用于分页查看长文本文件,常用参数包括-N(显示行号,将在浏览文件时显示行号),less命令可以在查看文件内容时滚动屏幕,而且还支持在文件中查找内容,所以也常用来查看日志:
# 分页查看,可以通过键盘上上下箭头翻页
less ./app.log
less 提供了强大的搜索功能,可以让我们在打开的文件中搜索指定的字符。输入上面的查看命令后,只需按下键盘上的 /,接着再输入关键词并按回车,就可以高亮显示向下搜索出包含关键词的日志行(如果要向上搜索 / 就换成 ?)。
输入 G 移动到最后一行,输入 g 移动到第一行,输入 q 可以退出 less 命令。
grep
用于在日志文件中搜索特定的模式或字符串,一般会通过管道符号 | 来配合上面的其他命令一块使用:
# 查看整个日志中包含关键字的日志内容
cat ./app.log | grep "cafehaus"
# 通过管道符 | 和 grep 过滤数据,--color 可以高亮关键字
less app.log | grep '1345102704' | grep 'zhou' --color
# 直接通过绝对路径,联合查询,grep -v 反向过滤
grep '1345102704' /data/cafe-user/log/cafe-user.log | grep -v 'zhou' | tail -n 10
平时用得比较多的也就 tail、less 和 grep,实际用法自己去开发服务器上跟着示例敲两遍也就会用了,所以查看日志其实并没有多高深,本质跟我们平时在电脑上用其他软件打开一个文件来查看一样,只不过服务器上我们需要敲对应的命令才能来完成同样的操作。
因为日志文件本质也就是一个文本文件,所以上面的命令对于 .txt 文本文件也是同样适用的。