我们在定位和分析Bug时,有时候需要查看后台程序打印的runtime log。这些log可能以时间戳命名区分时间,分布在多个不同的目录树下。
虽然Omad为我们提供了方便的查看log的入口,省去了手动登陆到后台的命令行操作,但是仍然存在一些限制,影响着查看后台log的效率和体验,比如:
如果能把所需要的log文件统一收集下载到本地,就可以方便的用编辑器检索、关键字高亮等方法定位bug。
需要探索一种方法,能方便的把当天的log集中在一起下载到本地的方法,这个任务主要有两部分:收集log和传输log。因为log所在的路径相对稳定,收集log的工作相对简单。而把log传输到本地,有多种协议供选择,各自的优缺点如下:
http:
优点:最方便的查看方法,
缺点:没有用户身份验证,而且需要后台配置
ftp:
优点:相比http,加入了用户身份验证,
缺点:仍然需要服务器端复杂的配置
上面两种方式都是明文传输,而且后台配置复杂,相比之下,SSH提供的文件传输方法要好很多。
SSH Terminal端的自动化:
SecureCRT或者Xshell内置的自动化脚本功能,支持VB ActiveX或者python的脚本,可以帮助自动登录、输入命令、下载文件等一系列操作。
优点:配置简单,可以利用已有的SecureCRT等软件的秘钥配置;提供对话框控件,界面友好;
缺点:SecureCRT的文件传输协议似乎只能是古老的Zmodem,也需要服务器端的配置
Python的Paramiko库:
Paramiko是支持SSHv2的Python第三方库,支持通过SFTP方法在远程服务器上操作文件、传输文件。
优点:强大的Paramiko把SSH操作封装的很好,10行以内就可以完成下载指定文件的功能
缺点:需要使用者额外安装Python解释器、Paramiko库和硬依赖的ECDSA和PyCrypto,如果是一次性使用,准备工作比较麻烦。
SCP命令:
最后选择了shell的SCP命令,与SSH天然结合,而且体积小、速度快。代码项目在这里。 程序界面是这样的:
就这一具体问题来说,一定不止上述几种方法,我这里只是抛个砖。但是就更一般的情况,我们碰到一个技术难题时,往往有好多种解决方案,当我们想到一种方案后,不妨再探索一下是不是有更好的方案,说不定就有收获和长进。
本文来自网易实践者社区,经作者吕丰授权发布