Необходимо добавить временную метку в файл журнала, который генерируется с помощью drool

#java #jboss #drools

#java #jboss #drools

Вопрос:

Мы используем API drools. Необходимо добавить временную метку в 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
  

Тест печатается в server.log, который настроен с помощью log4j.

Приведенные ниже журналы генерируются в 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>
  

Заранее спасибо

Ответ №1:

Я внес изменения в drools-core-5.0.1.jar чтобы добавить временную метку.

Код модифицируется в методе writeToDisk WorkingMemoryFileLogger.java досье. Ниже приведен существующий код

      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("[rn]", "");
    fileWriter.write(timestamp " "  logevent   "n");
  }