【问题标题】:Need to add timestamp in log file which is generated using drool需要在使用 drool 生成的日志文件中添加时间戳
【发布时间】:2016-10-03 13:38:05
【问题描述】:

我们正在使用一个drools api。需要在 Test.log 中添加时间戳。下面是代码。

 public static KStatefulSessionWrapper getNewStatefulKnowledgeSessionWrapper() throws Exception {
    KStatefulSessionWrapper ksessionWrapper = null;

    try {
        ksessionWrapper = new KStatefulSessionWrapper();
        StatefulKnowledgeSession ksession = getKagent().getKnowledgeBase().newStatefulKnowledgeSession();
        ksessionWrapper.setStatefulKnowledgeSession(ksession);
        ksessionWrapper.setLogger(getKnowledgeRuntimeLoggerForSession(ksession));


    } catch (Exception e) {
        logger.error(" StatefuleKnowledgeSesion can not be created "
                + e.getMessage());
        e.printStackTrace();
        throw e;
    }
    System.out.println(" Session is created..");
    return ksessionWrapper;
}


 public static KnowledgeRuntimeLogger getKnowledgeRuntimeLoggerForSession(
        StatefulKnowledgeSession ksession) throws Exception {
    KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "Test");
    return logger;
}

通过在 java 文件中设置全局变量尝试。

 ksession.setGlobal("logger", logger);

logger.info("Test"); // In drl file

测试打印在使用 log4j 配置的 server.log 中。

Test.log 中正在生成以下日志

<org.drools.audit.event.ActivationLogEvent>
 <type></type>
 <activationId></activationId>
 <rule>rule number</rule>
<declarations></declarations>

所需的输出如下所示

 2016-10-03 13:26:44,533 GMT-00:00 <org.drools.audit.event.ActivationLogEvent>
 <type></type>
 <activationId></activationId>
 <rule>rule number</rule>
<declarations></declarations>

提前致谢

【问题讨论】:

    标签: java jboss drools


    【解决方案1】:

    我在 drools-core-5.0.1.jar 中进行了更改以添加时间戳。

    在 WorkingMemoryFileLogger.java 文件的 writeToDisk 方法中修改了代码。以下是现有代码

         FileWriter fileWriter = null;
         fileWriter = new FileWriter(this.fileName + (this.nbOfFile == 0 ? ".log" : new StringBuilder().append(this.nbOfFile).append(".log").toString()), true);
         XStream xstream = new XStream();
         for (LogEvent event : this.events) {
            fileWriter.write(xstream.toXML(event) + "\n");
           }
    

    以下是修改后的代码

     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");;
     Date date=new  Date();
     String timestamp=sdf.format(date)+" GMT-00:00";
     FileWriter fileWriter = null;
     fileWriter = new FileWriter(this.fileName + (this.nbOfFile == 0 ? ".log" : new StringBuilder().append(this.nbOfFile).append(".log").toString()), true);
     XStream xstream = new XStream();
    
     for (LogEvent event : this.events) {
      String logevent=(xstream.toXML(event)).toString().replaceAll("[\r\n]", "");
        fileWriter.write(timestamp+" "+ logevent + "\n");
      }
    

    【讨论】:

      猜你喜欢
      • 2012-12-24
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2015-08-30
      • 2011-02-05
      • 1970-01-01
      相关资源
      最近更新 更多