You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:12:15