현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
로깅은 문제를 디버깅하는 효율적인 방법 중 하나입니다. 헤더, 양식 매개변수, 쿼리 매개변수, 동적 변수 등 API 요청에 관한 정보는 모두 나중에 참조할 수 있도록 로깅할 수 있습니다. 정보는 메시지 프로세서 (Apigee Edge for Private Cloud만 해당) 또는 Sumo Logic, Splunk, Loggly와 같은 타사 서버에 로컬로 로깅될 수 있습니다.
안티패턴
아래 코드에서는 JavaScript 정책의 httpClient
객체가 Sumo Logic 서버에 데이터를 기록하는 데 사용됩니다. 즉, 로깅 프로세스는 요청/응답 처리 중에 실제로 발생합니다. 이 방법은 처리 시간이 늘어나 전체 지연 시간이 증가하므로 비생산적입니다.
LogData_JS:
<!-- /antipatterns/examples/1-4.xml --> <Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS"> <DisplayName>LogData_JS</DisplayName> <ResourceURL>jsc://LogData.js</ResourceURL> </Javascript>
LogData.js:
<!-- /antipatterns/examples/1-5.xml --> var sumoLogicURL = "..."; httpClient.send(sumoLogicURL); waitForComplete();
여기서 원인은 로깅 프로세스가 완료될 때까지 호출자의 작업을 정지하는 waitForComplete()
호출입니다. 유효한 패턴은 이 호출을 제거하여 이를 비동기식으로 만드는 것입니다.
영향
- JavaScript 정책을 통해 로깅 코드를 실행하면 API 요청의 지연 시간이 늘어납니다.
- 동시 요청은 메시지 프로세서의 리소스에 부담을 주어 다른 요청의 처리에 부정적인 영향을 미칠 수 있습니다.
권장사항
- MessageLogging 정책을 사용하여 데이터를 로그 서버 또는 Sumo Logic, Splunk, Loggly 등의 서드 파티 로그 관리 서비스로 전송/로그합니다.
- 메시지 로깅 정책의 가장 큰 장점은 응답이 요청 클라이언트 앱으로 다시 전송된 후에 실행되는 포스트 클라이언트 흐름에서 정의할 수 있다는 것입니다.
- Post Client 흐름에 이 정책을 정의하면 로깅 활동과 요청/응답 처리를 분리하여 지연 시간을 피하는 데 도움이 됩니다.
- JavaScript를 통해 로깅해야 하는 특정 요구사항이나 이유가 있는 경우 (위에서 언급한 Post Client 흐름 옵션 아님) 이를 비동기식으로 수행해야 합니다. 즉,
httpClient
객체를 사용하는 경우 자바스크립트가waitForComplete
를 구현하지 않도록 해야 합니다.