python实现规则引擎_如何用Python实现“规则引擎”?

我正在用Python编写日志收集/分析应用程序,我需要编写一个“规则引擎”来匹配和处理日志消息。

它需要具有以下特点:正则表达式匹配消息本身

消息严重性/优先级的算术比较

布尔运算符

我设想一个例子规则可能是这样的:(message ~ "program\\[\d+\\]: message" and severity >= high) or (severity >= critical)

我正在考虑使用PyParsing或类似的方法来实际解析规则并构建解析树。

我想到的当前(尚未实现的)设计是为每个规则类型设置类,并根据分析树构建并链接它们。然后每个规则都会有一个“匹配”方法,可以让消息对象返回它是否与规则匹配。

很快,例如:class RegexRule(Rule):

def __init__(self, regex):

self.regex = regex

def match(self, message):

return self.regex.match(message.contents)

class SeverityRule(Rule):

def __init__(self, operator, severity):

self.operator = operator

def match(self, message):

if operator == ">=":

return message.severity >= severity

# more conditions here...

class BooleanAndRule(Rule):

def __init__(self, rule1, rule2):

self.rule1 = rule1

self.rule2 = rule2

def match(self, message):

return self.rule1.match(message) and self.rule2.match(message)

然后根据消息的分析树将这些规则类链接在一起,并在顶部规则上调用match()方法,该方法将级联下来,直到评估所有规则为止。

我只是想知道这是一种合理的方法,还是我的设计和想法完全不合时宜?不幸的是,我从来没有机会参加Unviersity的编译器设计课程或其他任何类似的课程,所以我非常想自己想出这些东西。

有人在这些事情上有一些经验,请加入并评估这个想法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值