暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【查看日志】一文详解cdlog

嘎嘎软件测试 2021-08-18
953

1、需求背景
“不看日志直接提bug都是刷耍流氓!”

我们在日常测试过程中,经常需要去服务器查看日志,测试一个场景可能就涉及到好几个应用,作为测试必须熟悉系统之间的调用关系。

那么出现问题时可能就需要去好几个系统排查问题,需要cd到不同的目录下进行查看,手速快的同事一顿猛敲,手速慢的同事只能干着急了......那么如何快速的查看日志呢?需要一个cdlog命令!


2、需求分析
一般项目的目录结构都是一样的,区别在于应用目录名称以及*.log名称,那么将应用名称提取出来作为脚本参数,脚本来执行cd到log目录下即可;

日志一般分为正常日志、启动日志和error日志,所以我们可以再提取一个参数,参数值分别为log、slog、err;

有时候服务器挂掉了,需要重启,或者需要停止服务,那么需要一个start和stop,如果只想进入到启动脚本目录,则需要一个sdir即可;

那么如何实现呢?写一个脚本,每次执行该脚本,那么还是不可避免的需要输入命令,有没有一个可以在任意位置执行该脚本呢?有的,使用alias,也就是别名,详情查看【3、实现方式alias】


3、实现方式alias
/etc/profile.d是设置环境变量的,并且对所有用户有效
cd /etc/profile.d && vim alias_bash.sh
输入别名
让别名生效:source alias_bash.sh
查看是否成功写入:alias
复制


4、具体实现
#!/bin/bash


#demo:alias cd='func() {cd /app; ls;}; func'


#cd /etc/profile.d,把cdlog_bash.sh放上去,source cdlog_bash.sh,查看是否成功写入:alias,然后输入cdlog,看到有一些提示就表示成功了


# shellcheck disable=SC2142
alias cdlog='func() {


fun_cdlog(){
#进入对应的log目录
if [[ ${module} = core && ! ${log} ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-${module}/logs/${codeName}-${module} && ll;
elif [[ ${module} = oms && ! ${log} ]];then
cd /app/${comp}-${codeName}/tomcat/logs/${codeName}-${module} && ll;
elif [[ ${codeName} = wcs && ! ${module} && ! ${log} ]];then
cd /app/${comp}-${codeName}/python/logs && ll;


#进入对应的启动项目的目录
elif [[ ${module} = core && ${log} = sdir ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/bin && ll;
elif [[ ${module} = oms && ${log} = sdir ]];then
cd /app/${comp}-${codeName}/tomcat && ll;
elif [[ ${codeName} = wcs && ${log} = sdir ]];then
cd /app/${comp}-${codeName}/python && ll;


#查看log的日志
elif [[ ${module} = core && ${log} = log ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/logs/${codeName}-${module}; tail -f -n 500 ${codeName}-${module}.log
elif [[ ${module} = oms && ${log} = log ]];then
cd /app/${comp}-${codeName}/tomcat/logs/${codeName}-${module}; tail -f -n 500 ${codeName}-${module}.log
elif [[ ${codeName} = wcs && ${module} = log ]];then
cd /app/${comp}-${codeName}/python/logs; tail -f -n 500 spdier.log
elif [[ ${codeName} = wcs && ${module} = log1 ]];then
cd /app/${comp}-${codeName}/python/logs1; tail -f -n 500 spdier.log
elif [[ ${codeName} = wcs && ${module} = log2 ]];then
cd /app/${comp}-${codeName}/python/logs2; tail -f -n 500 spdier.log


#查看启动的日志
elif [[ ${module} = core && ${log} = slog ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/logs; tail -f -n 500 stdout.log
elif [[ ${module} = oms && ${log} = slog ]];then
cd /app/${comp}-${codeName}/tomcat/logs; tail -f -n 500 catalina.out


#查看err的日志
elif [[ ${module} = core && ${log} = err ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/logs/${codeName}-${module}; tail -f -n 500 ${codeName}-${module}_err.log
elif [[ ${module} = oms && ${log} = err ]];then
cd /app/${comp}-${codeName}/tomcat/logs/${codeName}-${module}; tail -f -n 500 ${codeName}-${module}_err.log


#grep命令查看日志
elif [[ ${module} = core && ${log} = grep ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/logs/${codeName}-${module}; more ${codeName}-${module}.log | grep ${cont}
elif [[ ${module} = oms && ${log} = grep ]];then
cd /app/${comp}-${codeName}/tomcat/logs/${codeName}-${module}; more ${codeName}-${module}.log | grep ${cont}


#启动core或者oms
elif [[ ${module} = core && ${log} = start ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/bin; su ${comp}-${codeName} -s /bin/bash stop.sh; su ${comp}-${codeName} -s /bin/bash start.sh
elif [[ ${module} = oms && ${log} = start ]];then
cd /app/${comp}-${codeName}/tomcat; su ${comp}-${codeName} ${comp}-${codeName}.sh stop; su ${comp}-${codeName} ${comp}-${codeName}.sh start


#停止core或者oms
elif [[ ${module} = core && ${log} = stop ]];then
cd /app/${comp}-${codeName}/jetty/${codeName}-core/bin; su ${comp}-${codeName} -s /bin/bash stop.sh
elif [[ ${module} = oms && ${log} = stop ]];then
cd /app/${comp}-${codeName}/tomcat; su ${comp}-${codeName} ${comp}-${codeName}.sh stop


#查看进程
elif [[ ${log} = ps ]];then
ps -ef|grep ${comp}-${codeName}


else
echo -e "\033[32m请输入正确参数!(以eam-core为例子,oms同理)\n \
1、进入eam-core日志目录:cdlog eam core\n \
2、进入eam-core启动目录:cdlog eam core sdir\n \
3、查看eam-core.log:cdlog eam core log\n \
4、查看stdout.log:cdlog eam core slog\n \
5、查看eam-core_err.log:cdlog eam core err\n \
6、grep '关键字'查看eam-core.log:cdlog eam core grep xxx\n \
7、启动core:cdlog eam core start\n \
8、停止core:cdlog eam core stop\n \
9、查看进程:cdlog eam ps\n \
10、如果是jly项目,请在cdlog后面加jly,例子同上\033[0m"
fi
}


if [[ $1 = jly && $2 != ps && $3 != ps ]];then
comp=$1
codeName=$2
module=$3
log=$4
cont=$5
fun_cdlog ${comp} ${codeName} ${module} ${log} ${cont}
elif [[ $1 = jly && $2 != ps && $3 = ps ]];then
comp=$1
codeName=$2
log=$3
fun_cdlog ${comp} ${codeName} ${log}
elif [[ $1 != jly && $2 != ps ]];then
comp=fb
codeName=$1
module=$2
log=$3
cont=$4
fun_cdlog ${comp} ${codeName} ${module} ${log} ${cont}
elif [[ $1 != jly && $2 = ps ]];then
comp=fb
codeName=$1
log=$2
fun_cdlog ${comp} ${codeName} ${log}
else
echo "请输入正确参数!"
fi


}; func'
复制

5、最后总结
测试这个工作本身属性就是重复和繁琐,如何提高效率,解决重复和繁琐,就体现了一个测试工程师的价值!

善于挖掘用户痛点不仅是产品经理的工作,也是测试工程师的职责!

文章转载自嘎嘎软件测试,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论