【发布时间】:2017-10-20 06:54:35
【问题描述】:
我正在为以下问题寻找合适的方法/方法/模式: 我有一个长日志文件,其中包含存储在关系数据库表中的错误消息(errorID、errortype、错误开始和结束的时间戳,以及有关错误的其他信息)。错误消息,即。一个日志条目,可能有这样的标题:
[ErrorID,Errortype,到达,结束,速度,热量,...]
-) 错误ID:唯一
-) ErrorType: 例如可能是“太快”
-) 到达:错误发生时
-) 结束:当错误结束时
-) 速度,热量,...:例如。 100 公里/小时和 100 度。
可能还有其他字段,但请保持简单。附加字段只是提供有关错误的更多信息。
这些行/错误消息中的大多数都不重要,但某些消息组合很重要,假设有 100 种错误消息模式很重要(时间方面和消息内容方面),例如:
eg.1) 如果消息 x 在某个时间间隔内出现 y 次,我想找到它(无论中间的其他消息如何)
eg.2) 消息 z 本身很重要,我想找到它
eg.3) x 类型为 y 的消息块具有相同的时间戳,我想找到它们
这本质上是模式匹配,其中模式的每次出现都将返回 patternID 和模式中第一条消息的时间戳(或所有消息的时间间隔)。我可以为我想要找到的每种模式使用大量 if 语句轻松编写代码(例如,过滤日志并显示是否找到了某些东西),但这不可扩展并且很快就会变得混乱。
Factory+AbstractFactory-pattern 将是我的第一种方法(一般模式类型的抽象,特定实现的普通工厂),但我需要为每个模式创建一个工厂,并且只创建数百个类,类似地策略模式。我还发现有些东西叫做规则引擎,但我发现它们不够灵活,无法轻松捕捉我的问题。
有什么好的方法可以解决这个问题(没有软件,我想自己编写代码)?
【问题讨论】:
-
1.更准确地描述您的数据文件(标题和示例数据)
-
2.如果您有 3 个不同的问题,请从这个问题中提出 3 个不同的问题
-
3.通常尝试更精确,更少冗长。想象一下,您在这里与编码机器交谈,它们需要输入来解决单个、精确指定的编码问题。不要在这里与人类交谈一段时间,让他们慢慢理解你想要什么,然后在某个时候他们开始解决你的问题,你回顾他们并告诉他们他们是否误解了你等等。
-
@hoijui:我更新了问题以包含日志表的示例标题。这基本上是一个问题:如何管理和检测特定日志消息类型的各种组合,这些组合可能会随着时间的推移而分布在大型日志表中。
标签: design-patterns matching rule-engine