2016-10-03 6 views
0

私たちはdrools APIを使用しています。 Test.logにタイムスタンプを追加する必要があります。以下はコードです。droolを使用して生成されるログファイルにタイムスタンプを追加する必要があります

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 

testはlog4jで構成されたserver.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> 

おかげで以下のようにTest.logに生成されている

答えて

0

私は、timolsampを追加するために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"); 
    } 
変更され存在しています
関連する問題