1.2.2 • Published 4 years ago
log-analyze v1.2.2
log-analyze
log-analyze 是一个日志分析器, 主要是用于过滤大量的日志, 选择出自己关注的日志
日志格式要求:
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] false
=> 日期 时间 等级 消息体
安装与使用
安装: yarn global add log-analyze
运行: logz
logz 命令行参数
logz
默认行为: 选择当前的 ./logs 目录中的日志.- 设置需要解析的目标目录,
logz ./login-logs
将解析 login-logs 目录下的日志. 然后在目标目录中生成 output.log
基本原理
- 运行
logz
, 将开始解析当前目录中 的logs
中的日志. - 读取例如
2020-03-17.main.log
的日志文件, 使用文件名的 中的第一段2020-03-17
作为日志的日期 logs
中可以有.main
和.render
的日志文件(要求是同一天的), 读取日志文件, 使用日志文件的日期解析出每一条日志. 然后会根据时间顺序合并日志.- 识别用户输入的命令, 开始过滤内存中的日志, 然后在当前目录的
output.log
中输出过滤的结果.
特殊功能
logz $dir
, 将会解析$dir
下的日志- 对于高度压缩的日志进行解压, 如果
$dir
是一个 .tar 文件, 将会触发自动解压,并提取解压后的日志. - 可以监听源日志文件是否有变更, 如果变更将会自动触发重新过滤.
过滤语法
可以过滤的关键点 1. time 时间. 2. level 日志等级. 3. message 日志的内容. 4. mark 标记某些日志.
所有的日志过滤都将使用 new RegExp
构建一个正则表达式, 可以使用正则表达式的语法.
应用举例
`12:53 IE` api.task >>> 刘某
选择时间匹配 12:53, 等级匹配 I 或则 E 的日志, 且日志内容中包含 api.task, 然后对包含刘某的日志特殊标记.
过滤时间?
例如: `12:578` 需要使用反引号包裹, 以和 消息体的过滤区分.
过滤日志等级?
例如: `E`, 过滤 所有的错误等级的日志, 需要使用反引号包裹. 由于日志等级不包含时间, 所有可以和时间自动的区分.
过滤日志内容
例1: Action:todo source
, 其中使用空格表示多段的匹配. 这里表示 同时正则匹配 Action:todo 和 source
例2: source:_1
使用下划线替代空格, 下滑线将同时匹配空格和下划线本身.
标记日志
例如: >>> 刘某
, 使用>>>
后面的字段过滤, 和日志内容过滤一样的算法, 标记匹配的日志.
标记的效果为:
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] false
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] false
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] false
<<<
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] 刘某 嘿嘿!
>>>
2020-03-17 12:06:13.421 I [Action:AUTH/GET_USER_INFO_DONE] false
尖括号<<<>>>
括住的就是被标记的日志.