Drools 6 のConsoleLogger

こんにちは。平田です。

Droolsでは、ルールエンジンの内部的な挙動をログ出力する仕組みがあり、ルールを書くときによく使います。これをDrools 6 で使う手順を説明します。

マニュアルの4.2.4.5. KieRuntimeLogger によれば、kmodule.xmlでLoggerを組み込んだKieSessionを定義するか、APIでLoggerをセットアップします。これを参考に、以下の様なコードを書きます。

KieRuntimeLogger logger
  = KieServices.Factory.get().newConsoleLogger(ksession);

Loggerは、内部的にSLF4JにてINFOレベルでログ出力しているため、ロギングライブラリをセットアップする必要があります。私はLogbackを使いました。

まずMavenの依存性を追加し、

...
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.1</version>
  <scope>test</scope>
</dependency>

Logbackを設定します。

<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender" >
    <encoder>
      <pattern>%d{HH:mm:ss,SSS} %-5p [%c] \(%t\) %m%n</pattern>
    </encoder>
  </appender>
  <logger name="org.drools" level="info" />
  <root level="info">
    <appender-ref ref="CONSOLE" />
  </root>
</configuration>

これで監査ログが出るようになります。

05:57:23 INFO  [org.drools.core.audit.WorkingMemoryConsoleLogger] (main) OBJECT ASSERTED value:com.natswell.yoyogi.infrastructure.rule.fact.OrderItemFact@2b136b1d factId: 1
05:57:23 INFO  [org.drools.core.audit.WorkingMemoryConsoleLogger] (main) OBJECT ASSERTED value:com.natswell.yoyogi.domain.model.DiscountPolicyTest$1@b569bee factId: 2
05:57:23 INFO  [org.drools.core.audit.WorkingMemoryConsoleLogger] (main) OBJECT ASSERTED value:com.natswell.yoyogi.domain.model.DiscountPolicyTest$1@548daae6 factId: 3
05:57:23 INFO  [org.drools.core.audit.WorkingMemoryConsoleLogger] (main) ACTIVATION CREATED rule:割引キャンペーン activationId:割引キャンペーン [1, 4] declarations: $orderItemFact=com.natswell.yoyogi.infrastructure.rule.fact.OrderItemFact@2b136b1d(1); $totalDiscountRate=0.3(4)
05:57:23 INFO  [org.drools.core.audit.WorkingMemoryConsoleLogger] (main) BEFORE ACTIVATION FIRED rule:割引キャンペーン activationId:割引キャンペーン [1, 4] declarations: $orderItemFact=com.natswell.yoyogi.infrastructure.rule.fact.OrderItemFact@2b136b1d(1); $totalDiscountRate=0.3(4)

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です