2016-10-03 5 views
0

Мы используем слюни 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 

Тест печатается на сервере.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> 

Спасибо заранее

ответ

0

Я сделал изменения в drools-core-5.0.1.jar, чтобы добавить Timestamp.

Код изменен в методе writeToDisk файла WorkMemoryFileLogger.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("[\r\n]", ""); 
    fileWriter.write(timestamp+" "+ logevent + "\n"); 
    }