提取日志中出现的userId或其他信息

项目上线后经常出现需要统计用户数据、接口请求等。完美的情况下,在项目开始前就设计好哪些request、中间过程需要落地到db、或以一定格式存入专门的log中,但也常需要同学们临时去业务日志中grep

大致分为三步:找到包含数据的行、提取出行中需要的数据、输出到文件并提取到本地

实践中用到的一种方式:

zcat /home/机器中的日志路径/logs/finscore.log.gz | grep 'TaskController.queryTaskListApi(..)的请求参数为' | awk -F' '{print $2}' > machine1_userId_2017-09-04.log

用到的命令:

  • zcat:就是查看压缩文件的内容,如果日志未压缩,直接cat也行
  • grep:找到包含数据的行
  • awk:用法为 awk -F分隔字符 操作,比如awk -F: '{print $2}' 代表将当前数据按照英文冒号进行分割,并将分割后的第二段中的内容输出。需要注意分隔字符的转义。如果不写-F,默认会用空格作为分隔符

如果是ssh登录的线上机器,拷贝到本地,还需要在本地这样做:

scp 线上机器地址:machine1_userId_2017-09-04.log /Users/micheal/temp/machine1_userId_2017-09-04.log

scp是有Security的文件copy,基于ssh登录。操作起来比较方便,敲完命令后会提示输入那台机器的登录密码,接着就开始copy了

对于提取数据中的精髓:提取,除了awk还有很多方法,比如可以用cut:

cat userId_2017-09-04.log | cut -d " -f 8 > userId_new_2017-09-04.log

cut命令:

  • -d:分隔符,和awk的-F一样
  • -f:分割后取第几段内容,如果要取多段:可以写 -f2-4,从第二段取到结尾:-f2-,从头取到第四段:-f-4;取第一段和第三段:-f1,3,随意组合(上文中awk中使用的print也有类似的语法,可以随意组合)

如果为多台机器,可以配合可分屏的terminal:
mac下推荐iTerm2:http://www.iterm2.com/,打开终端后分屏,然后广播output即可

linux:直接sudo apt-get install terminator

micheal.li > 阿智
micheal.li > mikeve@163.com
原文地址:https://www.cnblogs.com/loveCheery/p/7475953.html