当前位置: 首页 > 知识库问答 >
问题:

如何在KIE服务器中跟踪drools规则的执行?

胡星汉
2023-03-14

当规则应用程序在KIE服务器上运行时,如何启用规则引擎跟踪/日志记录?

规则应用程序是在工作台中创建的,不包含自定义代码。我能够使用KIE REST API执行规则,但是规则应用程序没有产生预期的结果。

环境:

我尝试了以下步骤:

  1. 使用Git在本地克隆工作台项目
  2. 将logback.xml添加到项目的根目录
  3. 将更改推回到工作台git repo
  4. 在工作台项目编辑器视图中添加了日志作为依赖项
  5. 更新项目版本并重新部署到容器

当我这样做时,它会忽略我的日志设置,但垃圾邮件会无休止地将消息日志到控制台,告诉我它不能实例化日志类:

20-Jun-2017 16:58:29.070 WARNING [http-nio-8080-exec-5] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type ch.qos.logback.classic.selector.C
ontextSelector due to ch.qos.logback.classic.selector.ContextSelector
20-Jun-2017 16:58:29.083 WARNING [http-nio-8080-exec-5] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type ch.qos.logback.classic.selector.C
ontextJNDISelector due to ch.qos.logback.classic.selector.ContextJNDISelector
20-Jun-2017 16:58:29.101 WARNING [http-nio-8080-exec-5] org.kie.server.services.drools.DroolsKieServerExtension.createContainer Unable to create instance of type ch.qos.logback.classic.selector.D
efaultContextSelector due to ch.qos.logback.classic.selector.DefaultContextSelector

共有1个答案

巫马松
2023-03-14

将以下jar添加到Tomcat的/lib文件夹中:

 logback-classic-1.1.3.jar
 logback-core-1.1.3.jar
 slf4j-api-1.7.2.jar
 slf4j-ext-1.7.2.jar

(不记得slf4j jar是否已经存在,或者我是否添加了它们。)

对于Windows,如果文本文件bin/setenv.bat不存在,则创建文本文件。

setenv.bat中,添加以下设置:

set "JAVA_OPTS=%JAVA_OPTS% -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.configurationFile="%CATALINA_HOME%\conf\logback.groovy""

这些控制台监听器指示logback告诉您是否您的logback配置是错误的。另一个设置是您的日志配置文件的位置。

对于跟踪规则,我的logback.groovy如下所示:

import java.nio.charset.Charset

appender('STDOUT', ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        charset = Charset.forName('UTF-8')

        pattern = "%d{HH:mm:ss.SSS} %-5level %logger{5} - %msg%n"
    }
}

appender('STDOUT-SHORT', ConsoleAppender) {
    encoder(PatternLayoutEncoder) {
        charset = Charset.forName('UTF-8')

        pattern = "%d{HH:mm:ss.SSS} - %msg%n"
    }
}

root(WARN, ["STDOUT"])

logger("org.apache", WARN, ["STDOUT"], false)
logger("org.kie.server", WARN, ["STDOUT"], false)
logger("org.kie.server.controller", DEBUG, ["STDOUT"], false)
logger("org.guvnor.common.services.builder.IncrementalBuilderExecutorManagerFactoryImpl", ERROR, ["STDOUT"], false)
logger("bitronix", ERROR, ["STDOUT"], false)

logger("org.kie.api.event.rule", TRACE, ["STDOUT"], false)
logger("org.drools.core", TRACE, ["STDOUT-SHORT"], false)
logger("org.uberfire.commons.async.SimpleAsyncExecutorService", ERROR, ["STDOUT"], false)
 类似资料:
  • 我们目前正在将jBPM(7.37.final)规则部署到一个Kie执行服务器,并使用执行服务器自动公开的REST API调用规则。 但是由于一些体系结构的限制,我们不能使用REST API调用规则。该选项是执行一个基于jar(kie服务器客户机或其他)的集成,并从客户机(java应用程序)远程调用执行服务器上的规则。 Virges Vinay

  • “Drools骆驼服务器”和“KIE-WB执行服务器”有什么区别?它们是否服务于在远程服务器中执行规则/进程的相同目的?

  • 我正在使用drools引擎构建一个预警系统。当条件满足时,我们需要在规则(RHS)的操作上执行由Spring Framework实例化的@Service方法。 让Spring框架创建的@service实例被Drools规则的操作(RHS)使用的方法是什么? 我遵循了以下指示: 使用表单导入功能(Rule1.drl)。此解决方案不起作用,因为该类是在drools中实例化的,需要执行静态方法 关于如何

  • 我是个新来的流口水的人,正在尝试为牙齿保险申请设计一些规则。系统基本上会让用户知道,根据之前执行的服务的历史记录,他们将要执行的程序可能不在保险范围内。它还将有其他规则,可能是基于年龄的,但我可以处理这些规则。 我的事实是: 患者-患者信息列表 服务-以前执行的服务。(即:服务代码=D1234,执行日期=日期) 警报-(alertName=“X射线2/12个月期间”) 我需要一条规则,说明患者在过

  • 我的要求是在工作台之外(比方说在记事本中)修改规则文件(.drl),并用这个新的drl文件更新容器。是否有一种简单的方法以编程方式创建jar文件,并将其部署到中央maven存储库中?然后,我可以运行KIE扫描程序来查找jar文件的最新版本,并自动更新容器。或者有没有其他推荐的方法可以用更新的.drl文件更新正在运行的容器? 我的客户机应用程序不是Java的,所以我不是在寻找一个集成的解决方案,在那

  • 我想在不同的规则流中使用一些drools规则。由于Drools规则一次只支持一个规则流组名称,并且规则流业务规则任务也可以映射到单个规则流组,所以我无法在不同的规则流中使用相同的规则。有没有其他方法可以用来过滤规则?比如使用标记或元数据?