侧边栏壁纸
  • 累计撰写 2,046 篇文章
  • 累计创建 73 个标签
  • 累计收到 20 条评论

目 录CONTENT

文章目录

如何使用log4j的logger打印Drools的调试日志信息

大猿本猿
2021-11-14 / 1,210 阅读 / 0 字

如何使用log4j的logger打印Drools的调试日志信息

1.导入需要的包

修改pom.xml文件,加入log4j、slf4j的坐标

   <properties>
        <log4j.version>1.2.17</log4j.version>
        <slf4j.version>1.7.25</slf4j.version>
    </properties>
<!-- log4j start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log4j end -->

2.配置文件log4j.properties

### 设置日志级别###
log4j.rootLogger = debug,stdout
#log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

#### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = E://logs/log.log
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = DEBUG
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
#
#### 输出ERROR 级别以上的日志到=E://logs/error.log ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.E.File =E://logs/error.log
#log4j.appender.E.Append = true
#log4j.appender.E.Threshold = ERROR
#log4j.appender.E.layout = org.apache.log4j.PatternLayout
#log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
配置文件的位置:

main目录下resources下的log4j.properties,默认位置,不要更改。

image

3.测试代码

代码中需要通过kiesession设置一个全局变量logger

kieSession.setGlobal("logger",logger);
drl文件如下:

在文件顶端加入 global org.slf4j.Logger logger,规则文件中就可以直接用logger来输出日志了。

```Plain Text package demo

import com.lt.drools.entity.Order; global org.slf4j.Logger logger

rule "大于等于3件减180元" when order.setOriginalPrice($order.getOriginalPrice()-180); logger.debug("触发规则:"+drools.getRule().getName());

end

具体测试代码:

```java
private static Logger logger = LoggerFactory.getLogger(TestDroolsDemo.class);
/**
     * 测试Drools 的logger
     */
    @Test
    public void test3(){
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieClasspathContainer = kieServices.getKieClasspathContainer();
        //会话对象,用于和规则引擎交互
        KieSession kieSession = kieClasspathContainer.newKieSession();
        kieSession.setGlobal("logger",logger);//设置全局变量

        //构造订单对象,设置原始价格,由规则引擎根据优惠规则计算优惠后的价格
        Order order = new Order();
        order.setOriginalPrice(680);
        order.setGoodsNum(3);

        //将数据提供给规则引擎,order
        kieSession.insert(order);
        System.out.println("优惠后的价格1:"+order.getDiscountPrice());//应该是0,因为还没有执行规则

        //激活规则引擎,如果规则匹配成功则执行规则
        kieSession.fireAllRules();
        System.out.println("优惠后的价格2:"+order.getDiscountPrice());//通过fireAllRules规则才开始执行

        //关闭会话
        kieSession.dispose();

    }
执行后输出:

image

用log4j的方法来输出drools的匹配信息,可以避免使用工具类出现的问题。