前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【查看日志】一文详解cdlog

【查看日志】一文详解cdlog

作者头像
用户9913368
发布2022-07-26 08:21:24
4980
发布2022-07-26 08:21:24
举报
文章被收录于专栏:嘎嘎软件测试

1、需求背景

“不看日志直接提bug都是刷耍流氓!”

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

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

2、需求分析

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

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

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

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

3、实现方式alias

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

4、具体实现

代码语言:javascript
复制
#!/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、最后总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嘎嘎软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档