自动拷贝omad后台runtime log到本地的几种方法

未来已来2018-09-10 13:44

作者:吕丰


提出问题

我们在定位和分析Bug时,有时候需要查看后台程序打印的runtime log。这些log可能以时间戳命名区分时间,分布在多个不同的目录树下。


虽然Omad为我们提供了方便的查看log的入口,省去了手动登陆到后台的命令行操作,但是仍然存在一些限制,影响着查看后台log的效率和体验,比如:

  • 每个程序模块可能有多份log,比如debug、error、info等,多个实例会有更多份log,当看完一个模块的log需要看另一个模块时,操作略显复杂
    从一个应用的实例到另一个应用的实例,大概需要6次鼠标点击
  • omad提供下拉菜单,可以让用户方便的查看log目录下的所有文件,但是大多数时候,用户关心的是当天产生的log,也就是带着当天时间戳的特定的一份,需要用眼睛在几十个名称中找到当天的那一份
  • omad显示log的视口略小,且不方便搜索关键字,因为在页面上按Ctrl+F的搜索范围默认在整个页面

如果能把所需要的log文件统一收集下载到本地,就可以方便的用编辑器检索、关键字高亮等方法定位bug。

分析问题

需要探索一种方法,能方便的把当天的log集中在一起下载到本地的方法,这个任务主要有两部分:收集log和传输log。因为log所在的路径相对稳定,收集log的工作相对简单。而把log传输到本地,有多种协议供选择,各自的优缺点如下:

解决问题

  1. http:
    优点:最方便的查看方法,
    缺点:没有用户身份验证,而且需要后台配置

  2. ftp:
    优点:相比http,加入了用户身份验证,
    缺点:仍然需要服务器端复杂的配置
    上面两种方式都是明文传输,而且后台配置复杂,相比之下,SSH提供的文件传输方法要好很多。

  3. SSH Terminal端的自动化:
    SecureCRT或者Xshell内置的自动化脚本功能,支持VB ActiveX或者python的脚本,可以帮助自动登录、输入命令、下载文件等一系列操作。


    优点:配置简单,可以利用已有的SecureCRT等软件的秘钥配置;提供对话框控件,界面友好;
    缺点:SecureCRT的文件传输协议似乎只能是古老的Zmodem,也需要服务器端的配置

  4. Python的Paramiko库:
    Paramiko是支持SSHv2的Python第三方库,支持通过SFTP方法在远程服务器上操作文件、传输文件。
    优点:强大的Paramiko把SSH操作封装的很好,10行以内就可以完成下载指定文件的功能
    缺点:需要使用者额外安装Python解释器、Paramiko库和硬依赖的ECDSA和PyCrypto,如果是一次性使用,准备工作比较麻烦。

  5. SCP命令:
    最后选择了shell的SCP命令,与SSH天然结合,而且体积小、速度快。代码项目在这里。 程序界面是这样的:

总结

就这一具体问题来说,一定不止上述几种方法,我这里只是抛个砖。但是就更一般的情况,我们碰到一个技术难题时,往往有好多种解决方案,当我们想到一种方案后,不妨再探索一下是不是有更好的方案,说不定就有收获和长进。


本文来自网易实践者社区,经作者吕丰授权发布