2013-10-04 2 views
0

각 프록시 인스턴스 호출 기간 인 WSO2ESB의 로그 파일에 로그인해야합니다. 예 : .... 10 : 10 : 14736 [의 MessageID : XXXXXXXXX] 시간 : 259 MS] ....각 프록시 기간에 프록시 로그 파일에 로그인

그것은 XXXXXXXX의 MessageID를 연관 프록시 콜 (259)의 지속 시간을 갖고 있었다

ms. 활성 중재자 또는 BAM 조정자를 원하지 않습니다.

쉽게 생각할 수있는 아이디어가 있습니까? Tks Nicolas

답변

1

SYSTEM_TIME 속성은 Synapse Message Context Property입니다. 이것을 사용하여 메시지 흐름의 원하는 위치에서 현재 시간을 밀리 초 단위로 가져 와서 값을 특성으로 설정할 수 있습니다. 그런 다음 Script Mediator을 사용하여 시간 값 (propeties에 저장 됨)을 읽고 필요한 계산을 수행하는 작은 스크립트 (Javascript 또는 Ruby)를 작성할 수 있습니다. 결과를 스크립트 중재자에게 표시하거나 프록시 내에서 기록 될 수 있도록 새로운 속성으로 설정할 수 있습니다.

  1. 시냅스 메시지 컨텍스트 스크립트 중재자에게

    http://docs.wso2.org/pages/viewpage.action?pageId=26838871

  2. 로그인 중재자

    0,123,951,031을 사용

    http://docs.wso2.org/display/ESB470/Synapse+Message+Context+Properties

  3. Propeties

다음 샘플은 도움이 될 수 있습니다.

<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="SampleTimeProxy" 
     transports="https,http" 
     statistics="disable" 
     trace="disable" 
     startOnLoad="true"> 
    <target> 
     <inSequence> 
     <property name="TIME_1" 
        expression="get-property('SYSTEM_TIME')" 
        scope="default" 
        type="LONG"/> 
     </inSequence> 
     <outSequence> 
     <send/> 
     <property name="TIME_2" 
        expression="get-property('SYSTEM_TIME')" 
        scope="default" 
        type="LONG"/> 
     <script language="js">var time1 = mc.getProperty("TIME_1"); 
       var time2 = mc.getProperty("TIME_2"); 
       var timeTaken = time2 - time1; 
       print("-------------- " + timeTaken + " ms -----------------"); 
       mc.setProperty("RESPONSE_TIME", timeTaken); 
     </script> 
     <log> 
      <property name="time" expression="get-property('RESPONSE_TIME')"/> 
     </log> 
     </outSequence> 
     <endpoint> 
     <address uri="http://localhost:8080/axis2/services/SimpleStockQuoteService"/> 
     </endpoint> 
    </target> 
    <publishWSDL uri="http://localhost:8080/axis2/services/SimpleStockQuoteService?wsdl"/> 
    <description/> 
</proxy> 
관련 문제