#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");
}