360Qtest专栏 看 adb日志,服务器日志看吐了?Log color 拯救你!

阿克萌德 · 2016年09月07日 · 最后由 Totoro 回复于 2016年10月20日 · 2765 次阅读

log color

最近测试 sdk 的打点功能,需要通过日志来测试客户端上报的信息是否正确,不同的打点类型有不同的关键词,于是写了个脚本来高亮这些关键词,在终端看日志时不那么痛苦了,,Ծ‸Ծ,,

  1. how to use
    • 复制脚本到本地
    • 修改脚本中的 config,tag 是要高亮的关键字,color 是颜色 (格式:前景色;背景色) config = { 'tag': 'color' }
    • .zshrc 中配置 (bash 在.bashrc 中配置) alias logcolor='python -u PATH_TO_SCRIPT/logcolor.py' alias grep='grep --color --line-buffered'
    • 最后 stdout 使用管道重定向到 logcolor 即可 >your_command | logcolor
  2. logcolor.py ```python #!/usr/bin/env python # encoding: utf-8

"""
格式:\033[显示方式;前景色;背景色 m]

前景色 背景色 颜色


30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

显示方式 意义


0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
"""

import sys
import signal

config = {
'tag0': '37;42',
'tag1': '37;43',
'tag2': '37;44',
}

def color_line(line):
for key, value in config.items():
line = line.replace(key, '\033[1;%sm%s\033[0m' % (value, key))

return line

def exit_gracefully(signal, frame):
sys.exit(0)

if name == 'main':
signal.signal(signal.SIGINT, exit_gracefully)
#for line in sys.stdin:
for line in iter(sys.stdin.readline, ''):
print(color_line(line.rstrip()))
sys.stdout.flush()


3. 说明
    * grep - -line-buffered参数
    man grep 对该参数解释如下: ``` Force output to be line buffered.  By default, output is line buffered when standard output is a terminal and block buffered otherwise.```
    如果输出是std out的话,默认是带line-buffered的,否则输出会有缓冲(一般4096 bytes,和系统有关)。这样,如果  ``` >some_command | grep tag | logcolor ``` 时会明显感觉到输出有延时,所以grep需要line-buffered参数,  ```>some_command | grep --line-buffered tag | logcolor ```  。
    *  python 的```for line in sys.in ```
    直接使用``` for line in sys.in```,会导致和前面说的一样的延时问题,具体讨论在https://bugs.python.org/issue3907 ,所以改用```for line in iter(sys.stdin.readline, '')``` 。

本文首发自Qtest360公众号,只放干货,欢迎关注~
![](/photo/2016/ad3da5adc6d5e435afad2affb31d0b0f.jpg)
共收到 4 条回复 时间 点赞

不错,这是个很实用的工具。感谢分享~

PS:部分 markdown 格式有问题,麻烦更正下吧。

@mig_davidli 有没有效果图 贴出来看一下😁

谢谢分享~

看的不是很明白

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册