IBM ODM 8.12规则日志实现及RuleEngineObserver使用咨询
ODM 8.12 中 RuleEngineObserver 的使用与自定义初始化
1. RuleEngineObserver 是否可用?
可以用。RuleEngineObserver是IBM在ODM新版本中专门引入的、用于替代IlrLogHandler的官方组件,核心就是监听规则执行的生命周期事件,其中就包含你需要的ruleExecutionStarted和ruleExecutionEnded方法,完全能覆盖旧版本的日志记录需求。
2. 自定义观察者的实现与初始化步骤
步骤1:创建自定义观察者类
实现com.ibm.rules.engine.RuleEngineObserver接口,重写ruleExecutionStarted和ruleExecutionEnded方法,在方法内添加日志逻辑即可。不需要的接口方法可以留空实现:
import com.ibm.rules.engine.RuleEngineObserver; import com.ibm.rules.engine.RuleExecutionEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CustomRuleEngineObserver implements RuleEngineObserver { private static final Logger logger = LoggerFactory.getLogger(CustomRuleEngineObserver.class); @Override public void ruleExecutionStarted(RuleExecutionEvent event) { logger.info("规则执行开始 | 规则集: {} | 执行ID: {}", event.getRuleSetName(), event.getExecutionId()); } @Override public void ruleExecutionEnded(RuleExecutionEvent event) { logger.info("规则执行结束 | 规则集: {} | 执行ID: {} | 耗时(ms): {}", event.getRuleSetName(), event.getExecutionId(), event.getExecutionDuration()); } // 以下为接口默认方法,无需处理可留空 @Override public void ruleSetEvaluated(RuleExecutionEvent event) {} @Override public void ruleEvaluated(RuleExecutionEvent event) {} @Override public void ruleInstanceEvaluated(RuleExecutionEvent event) {} @Override public void factAsserted(RuleExecutionEvent event) {} @Override public void factRetracted(RuleExecutionEvent event) {} @Override public void factUpdated(RuleExecutionEvent event) {} }
步骤2:注册自定义观察者到规则引擎
有两种常用注册方式:
方式一:动态注册到单个规则会话
如果只需要给特定规则会话添加观察者,在创建会话后直接调用addObserver方法:
import com.ibm.rules.engine.RuleEngine; import com.ibm.rules.engine.RuleSession; import com.ibm.rules.engine.RuleSessionFactory; // 初始化规则引擎与会话 RuleEngine engine = RuleSessionFactory.getRuleEngine(); RuleSession session = engine.createRuleSession(); // 添加自定义观察者 session.addObserver(new CustomRuleEngineObserver()); // 执行规则逻辑 session.execute();
方式二:全局注册(所有会话生效)
如果希望所有规则会话都应用该观察者,可通过配置文件或代码全局注册:
- 配置文件方式:在规则集配置文件(如
ruleset.properties)中添加:ruleengine.observers=com.your.package.CustomRuleEngineObserver - 代码全局配置:
import com.ibm.rules.engine.RuleEngineConfiguration; RuleEngineConfiguration config = RuleEngineConfiguration.getInstance(); config.addObserver(new CustomRuleEngineObserver());
注意事项
- 确保自定义观察者的类路径正确,能被ODM的类加载器正常加载
- 日志框架(如SLF4J)的依赖需配置正确,避免日志冲突
- 若需要监听更多规则执行事件(如规则评估、事实变更),可直接重写接口中对应的方法
内容的提问来源于stack exchange,提问作者A Jain
相关产品推荐
相关产品推荐

