我们想说解析短字符串(日志消息)。
手工创建这样的解析器,因为正则表达式很难。因为有很多不同的日志消息 - 很多工作。而更糟糕的正则表达式是脆弱的 - 通过日志格式的微小变化很容易破解解析器,它不会处理日志消息的轻微变化 - 这一切都意味着巨大的支持工作,不变需要更新和修复。
我在思考 - 如果有办法以某种方式自动化这项工作? 提供一组示例 - 一组对 { "log message": [parsed tokens] }
并运行一些智能算法来生成所有解析器?
示例类似于映射input => desired output
:
// parser for request duration
"request http://site/url processed in 200ms": { id: 'request duration', url: ..., time: 200 }
"request processed in 2 sec, url http://site/url": { id: 'request duration', url: ..., time: 2000 }
"request processed, duration 2 sec, http://site/url": { id: 'request duration', url: ..., time: 2000 }
// parser for error
"total failure, memory overflow": { id: 'error', type: 'memory' }
"can't handle request http://site/url ": { id: 'error', type: 'unknown' }
// parser for images
"image /data/images/img1 resized, duration 300ms": { id: 'image resize', duration: 300 }
...
理想情况下,解析器应该:
我在思考 - 如果有简单方法这样做?
P.S。它看起来像命名实体识别的任务,但是python spaCy使用不同的格式来定义实体,它需要在消息中标记每个实体。我无法使用该格式,仅黑盒映射(input =>输出),如上例所示。